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
posted @ 2020-03-07 18:22  小明同学-Pro  阅读(2556)  评论(1编辑  收藏  举报