PROGRAMOWANIE W ŚRODWISKU SIECIOWYM I

 

ĆWICZENIE IV

 

Wyświetlanie zawartości katalogu

 

 

import java.awt.*;

import java.io.*;

 

public class FileLister extends Frame {

private List list;

private TextField infoarea;

private Panel buttons;

private Button parent, quit;

private FilenameFilter filter;

private File cwd;

private String[] entries;

 

// Create the graphical user interface, and list the initial directory.

public FileLister(String directory, FilenameFilter filter) throws IOException

{

super("File Lister");

this.filter = filter;

list = new List(12, false);

infoarea = new TextField();

infoarea.setEditable(false);

buttons = new Panel();

parent = new Button("Up a Directory");

quit = new Button("Quit");

buttons.add(parent);

buttons.add(quit);

this.add("Center", list);

this.add("South", infoarea);

this.add("North", buttons);

this.resize(550, 350);

this.show();

 

// list the initial directory.

list_directory(directory);

}

 

// This method uses the list() method to get all entries in a directory

// and then displays them in the List component.

public void list_directory(String directory) throws IOException {

File dir = new File(directory);

 

if (!dir.isDirectory())

throw new IllegalArgumentException("FileLister: no such directory");

list.clear();

cwd = dir;

this.setTitle(directory);

 

entries = cwd.list(filter);

for(int i = 0; i < entries.length; i++)

list.addItem(entries[i]);

}

 

// This method uses various File methods to obtain information about

// a file or directory.  Then it displays that info in a TextField.

public void show_info(String filename) throws IOException {

File f = new File(cwd, filename);

String info;

 

if (!f.exists())

throw new IllegalArgumentException("FileLister.show_info(): " +

"no such file or directory");

 

if (f.isDirectory()) info = "Directory: ";

else info = "File: ";

 

info += filename + "    ";

 

info += (f.canRead()?"read   ":"       ") +

(f.canWrite()?"write   ":"        ") +

f.length() + "   " +

new java.util.Date(f.lastModified());

 

infoarea.setText(info);

}

 

// This method handles the buttons and list events.

public boolean handleEvent(Event e) {

if (e.target == quit) System.exit(0);

else if (e.target == parent) {

String parent = cwd.getParent();

if (parent == null) parent = "/";  // Bug workaround

try { list_directory(parent); }

catch (IllegalArgumentException ex) {

infoarea.setText("Already at top");

}

catch (IOException ex) { infoarea.setText("I/O Error"); }

return true;

}

else if (e.target == list) {

// when an item is selected, show its info.

if (e.id == Event.LIST_SELECT) {

try { show_info(entries[((Integer)e.arg).intValue()]); }

catch (IOException ex) { infoarea.setText("I/O Error"); }

}

// When the user double-clicks, change to the selected directory

// or display the selected file.

else if (e.id == Event.ACTION_EVENT) {

try {

String item = new File(cwd, (String)e.arg).getAbsolutePath();

try { list_directory(item); }

catch (IllegalArgumentException ex) {/*new FileViewer(item)*/;}

}

catch (IOException ex) { infoarea.setText("I/O Error"); }

}

return true;

}

return super.handleEvent(e);

}

 

public static void usage() {

System.out.println("Usage: java FileLister [directory_name] " +

"[-e file_extension]");

System.exit(0);

}

 

// Parse command line arguments and create the FileLister object.

// If an extension is specified, create a FilenameFilter for it.

// If no directory is specified, use the current directory.

public static void main(String args[]) throws IOException {

FileLister f;

FilenameFilter filter = null;

String directory = null;

 

for(int i = 0; i < args.length; i++) {

if (args[i].equals("-e")) {

i++;

if (i >= args.length) usage();

filter = new EndsWithFilter(args[i]);

}

else {

if (directory != null) usage();  // Already set

else directory = args[i];

}

}

 

// if no directory specified, use the current directoy

if (directory == null) directory = System.getProperty("user.dir");

// Create the FileLister object

f = new FileLister(directory, filter);

}

}

 

// This class is a simple FilenameFilter.  It defines the required accept()

// method to determine whether a specified file should be listed.  A file

// will be listed if its name ends with the specified extension, or if

// it is a directory.

class EndsWithFilter implements FilenameFilter {

private String extension;

public EndsWithFilter(String extension) {

this.extension = extension;

}

public boolean accept(File dir, String name) {

if (name.endsWith(extension)) return true;

else return (new File(dir, name)).isDirectory();

}

}

 

 

 

 

 

 

 

Materiał:

 

Na podstawie: Java in a Nutshell

 

 

ZADANIE

1)     Zaimplementować wyświetlanie zawartości katalogu roboczego na kliencie, zapamiętać aktualny katalog roboczy  klienta

2)     Zaimplementować wyświetlanie zawartości katalogu roboczego na serwerze

3)  Nawigacja po katalogu roboczym serwera (polecenie CHDIR, LIST)

4)  Wysyłanie pliku na serwer