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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10356.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论