《Java examples in a nutshell》书中一个关于列出某一目录下的所有目录与文件的程序源代码

关于《Java examples in a nutshell》这本书,感觉很不错,里面有很多实例的,可以让我们更深入的学习。

 

我这里有电子书,不过是英文版的。如果大家需要,可留下邮箱,我发你啊。

 

代码如下:

 

 

public class FileLister extends Frame implements ActionListener, ItemListener {
    private List list;                  // To display the directory contents in
    private TextField details;          // To display detail info in
    private Panel buttons;              // Holds the buttons
    private Button up, close;           // The Up and Close buttons
    private File currentDir;            // The directory currently listed
    private FilenameFilter filter;      // An optional filter for the directory
    private String[  ] files;             // The directory contents
    private DateFormat dateFormatter =  // To display dates and time correctly
          DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

    /**
     * Constructor: create the GUI, and list the initial directory.
     **/
    public FileLister(String directory, FilenameFilter filter) {
        super("File Lister");              // Create the window
        this.filter = filter;              // Save the filter, if any

        // Destroy the window when the user requests it
        addWindowListener(new WindowAdapter( ) {
                public void windowClosing(WindowEvent e) { dispose( ); }
            });

        list = new List(12, false);        // Set up the list
        list.setFont(new Font("MonoSpaced", Font.PLAIN, 14));
        list.addActionListener(this);
        list.addItemListener(this);

        details = new TextField( );         // Set up the details area
        details.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
        details.setEditable(false);

        buttons = new Panel( );             // Set up the button box
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 5));
        buttons.setFont(new Font("SansSerif", Font.BOLD, 14));

        up = new Button("Up a Directory"); // Set up the two buttons
        close = new Button("Close");
        up.addActionListener(this);
        close.addActionListener(this);

        buttons.add(up);                   // Add buttons to button box
        buttons.add(close);

        this.add(list, "Center");          // Add stuff to the window
        this.add(details, "North");
        this.add(buttons, "South");
        this.setSize(500, 350);

        listDirectory(directory);          // And now list initial directory.
    }

    /**
     * This method uses the list( ) method to get all entries in a directory
     * and then displays them in the List component.
     **/
    public void listDirectory(String directory) {
        // Convert the string to a File object, and check that the dir exists
        File dir = new File(directory);
        if (!dir.isDirectory( ))
           throw new IllegalArgumentException("FileLister: no such directory");

        // Get the (filtered) directory entries
        files = dir.list(filter);

        // Sort the list of filenames.
        java.util.Arrays.sort(files);

        // Remove any old entries in the list, and add the new ones
        list.removeAll( );
        list.add("[Up to Parent Directory]");  // A special case entry
        for(int i = 0; i < files.length; i++) list.add(files[i]);

        // Display directory name in window titlebar and in the details box
        this.setTitle(directory);
        details.setText(directory);

        // Remember this directory for later.
        currentDir = dir;
    }

    /**
     * This ItemListener method uses various File methods to obtain information
     * about a file or directory. Then it displays that info.
     **/
    public void itemStateChanged(ItemEvent e) {
        int i = list.getSelectedIndex( ) - 1;  // minus 1 for Up To Parent entry
        if (i < 0) return;
        String filename = files[i];               // Get the selected entry
        File f = new File(currentDir, filename);  // Convert to a File
        if (!f.exists( ))                          // Confirm that it exists
            throw new IllegalArgumentException("FileLister: " +
                                               "no such file or directory");

        // Get the details about the file or directory, concatenate to a string
        String info = filename;
        if (f.isDirectory( )) info += File.separator;
        info += " " + f.length( ) + " bytes ";
        info += dateFormatter.format(new java.util.Date(f.lastModified( )));
        if (f.canRead( )) info += " Read";
        if (f.canWrite( )) info += " Write";

        // And display the details string
        details.setText(info);
    }

    /**
     * This ActionListener method is invoked when the user double-clicks on an
     * entry or clicks on one of the buttons.  If they double-click on a file,
     * create a FileViewer to display that file.  If they double-click on a
     * directory, call the listDirectory( ) method to display that directory
     **/
    public void actionPerformed(ActionEvent e) {
        if (e.getSource( ) == close) this.dispose( );
        else if (e.getSource( ) == up) { up( ); }
        else if (e.getSource( ) == list) {  // Double-click on an item
            int i = list.getSelectedIndex( ); // Check which item
            if (i == 0) up( );                // Handle first Up To Parent item
            else {                           // Otherwise, get filename
                String name = files[i-1];
                File f = new File(currentDir, name);    // Convert to a File
                String fullname = f.getAbsolutePath( );
                if (f.isDirectory( )) listDirectory(fullname);  // List dir
                else new FileViewer(fullname).show( );          // display file
            }
        }
    }

    /** A convenience method to display the contents of the parent directory */
    protected void up( ) {
        String parent = currentDir.getParent( );
        if (parent == null) return;
        listDirectory(parent);
    }

    /** A convenience method used by main( ) */
    public static void usage( ) {
        System.out.println("Usage: java FileLister [directory_name] " +
                           "[-e file_extension]");
        System.exit(0);
    }

    /**
     * A main( ) method so FileLister can be run standalone.
     * 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;  // The filter, if any
        String directory = null;       // The specified dir, or the current dir

        // Loop through args array, parsing arguments
        for(int i = 0; i < args.length; i++) {
            if (args[i].equals("-e")) {
                if (++i >= args.length) usage( );
                final String suffix = args[i];  // final for anon. class below

                // This class is a simple FilenameFilter.  It defines the
                // accept( ) method required 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.
                filter = new FilenameFilter( ) {
                        public boolean accept(File dir, String name) {
                            if (name.endsWith(suffix)) return true;
                            else return (new File(dir, name)).isDirectory( );
                        }
                    };
            }
            else {
                if (directory != null) usage( );  // If already specified, fail.
                else directory = args[i];
            }
        }

        // if no directory specified, use the current directory
        if (directory == null) directory = System.getProperty("user.dir");
        // Create the FileLister object, with directory and filter specified.
        f = new FileLister(directory, filter);
        // Arrange for the application to exit when the window is closed
        f.addWindowListener(new WindowAdapter( ) {
            public void windowClosed(WindowEvent e) { System.exit(0); }
        });
        // Finally, pop the window up.
        f.show( );
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值