Java 遞歸列出目錄下的文件以及子目錄

dy223 9年前發布 | 1K 次閱讀 Java

 
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");

}

} </pre>

 本文由用戶 dy223 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!