• 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
  • 相关阅读:
    Boost之使用篇(1)
    Lucene 3.0.0细节初窥(1)深入探索Lucene的consumer与processor
    整理一点关于Lucene的学习资料, 方便自己与别人查看
    使用Lucene 3.0.0的结构遍历TokenStream的内容.
    [原创]如何写一个完善的c++异常处理类
    Lucene 3.0.0 的TokenStream与Analyzer
    Lucene 3.0.0 之样例解析(4)IndexFiles.java
    贝叶斯、概率分布与机器学习
    Lucene用c++重写的详细安排
    Lucene 3.0.0的细节初窥(2)研究在索引过程中的缓存
  • 原文地址:https://www.cnblogs.com/isxiaoming/p/12436032.html
Copyright © 2020-2023  润新知