Java 递归列出目录下的文件以及子目录

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

 
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileFilter;

/**
 * -----------------------------------------------------------------------------
 * This program demonstrates how to list the file or subdirectories in a
 * given directory
 *
 * @version 1.0
 * -----------------------------------------------------------------------------
 */

public class ListFilesSubs {


    /**
     * Used to list the files / subdirectories in a given directory.
     * @param dir Directory to start listing from
     */
    private static void doSimpleFileListing(String dirName) {

        System.out.println();
        System.out.println("Simple file listing...");
        System.out.println("----------------------");

        File dir = new File(dirName);
        
        String[] children = dir.list();

        printFiles(children, dirName);

    }


    /**
     * Used to list the files / subdirectories in a given directory and also
     * provide a filter class.
     * @param dir Directory to start listing from
     * @param ff  A string that can be used to filter out files from the
     *            returned list of files. In this example, the String
     *            values is used to only return those values that start
     *            with the given String.
     */
    private static void doFileFilterListing(String dirName, String ff) {

        System.out.println("Filter file listing...");
        System.out.println("----------------------");

        final String fileFilter = ff;

        File           dir     = new File(dirName);
        FilenameFilter filter  = null;

        if (fileFilter != null) {

            // It is also possible to filter the list of returned files.
            // This example uses the passed in String value (if any) to only
            // list those files that start with the given String.
            filter = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.startsWith(fileFilter);
                }
            };
        }

        String[] children = dir.list(filter);

        printFiles(children, dirName);

    }


    /**
     * Used to list the files / subdirectories in a given directory and also
     * provide a filter class that only lists the directories.
     * @param dir Directory to start listing from
     */
    private static void doFileFilterDirectoryListing(String dirName) {

        System.out.println("Filter Directory listing...");
        System.out.println("---------------------------");

        File dir = new File(dirName);

        // The list of files can also be retrieved as File objects. In this
        // case, we are just listing all files in the directory. For the sake
        // of this example, we will not print them out here.
        File[] files = (new File(dirName)).listFiles();

        // This filter only returns directories
        FileFilter dirFilter = new FileFilter() {
            public boolean accept(File dir) {
                return dir.isDirectory();
            }
        };

        files = dir.listFiles(dirFilter);

        for (int i=0; i<files.length; i++) {
            System.out.println("[D] : " + files[i]);
        }
        System.out.println();


    }


    /**
     * Utility method to print the list of files to the terminal
     * @param children A String array of the file names to print out
     * @param dirName  The given directory to start the listing at.
     */
    private static void printFiles(String[] children, String dirName) {

        if (children == null) {
            System.out.println("Error with " + dirName);
            System.out.println("Either directory does not exist or is not a directory");
        } else {
            for (int i=0; i<children.length; i++) {
                // Get filename of file or directory
                String filename = children[i];
                if ((new File(dirName + File.separatorChar + filename)).isDirectory()) {
                    System.out.print("[D] : ");
                } else {
                    System.out.print("[F] : ");
                }
                System.out.println(dirName + File.separatorChar + filename);
            }
        }
        System.out.println();

    }

    /**
     * Sole entry point to the class and application.
     * @param args Array of String arguments.
     */
    public static void main(String[] args) {

        // Call the simple file listing method
        doSimpleFileListing("new_dir");

        // Now do the file listing but pass in a String to filter the file list
        if (args.length == 0) {
            doFileFilterListing("new_dir", null);
        } else {
            doFileFilterListing("new_dir", args[0]);
        }

        // Now do another example that only prints out the directories
        doFileFilterDirectoryListing("new_dir");

    }
}