Java基礎 - 遍歷目錄下所有文件(包括子目錄中的文件)


非遞歸方式

public static void noRecursion(File dir){
        int fileNum=0,folderNum=0;
        LinkedList<File> list=new LinkedList<File>();
        if(dir.exists()){
            if (null==dir.listFiles()){
                return;
            }
            list.addAll(Arrays.asList(dir.listFiles()));
            while(!list.isEmpty()){
                File[] files = list.removeFirst().listFiles();
                if(null==files){
                    continue;
                }
                for (File f:files) {
                    if (f.isDirectory()) {
                        System.out.println("文件夾:" + f.getAbsolutePath());
                        list.add(f);
                        folderNum++;
                    } else {
                        System.out.println("文件:" + f.getAbsolutePath());
                        fileNum++;
                    }
                }
            }
        }else{
            System.out.println("文件不存在!");
        }
        System.out.println("文件夾數量:" + folderNum + ",文件數量:" + fileNum);
    }

遞歸方式

 public static void showDir(File dir) {
        if(dir.exists()){
            //抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件和目錄。
            File[] files = dir.listFiles();
            if(null!=files){
                for (int i = 0; i < files.length; i++) {
                    if (files[i].isDirectory()) {
                        showDir(files[i]);
                    } else {
                        System.out.println(files[i]);
                    }
                }
            }
        }else{
            System.out.println("文件不存在!");
        }
    }

 性能比較

public static void main(String[] args) {
        System.out.println("------------------------------------------遞歸開始--------------------------------------------------------");
        long start = System.currentTimeMillis();
        showDir(new File("D:\\IDEAProject\\helloMi"));
        long end = System.currentTimeMillis();
        long num1=end-start;
        System.out.println("---------------------遞歸結束-----------------------");
        
        System.out.println("-------------------- 非遞歸開始----------------------");
        start=System.currentTimeMillis();
        noRecursion(new File("D:\\IDEAProject\\helloMi"));
        end=System.currentTimeMillis();
        System.out.println("---------------------非遞歸結束----------------------");
        long num2=end-start;
        System.out.println("-------------------------遞歸用時:"+num1);
        System.out.println("-------------------------非遞歸用時:"+num2);
    }
結果:
-------------------------遞歸用時:18
-------------------------非遞歸用時:20


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM