zoukankan      html  css  js  c++  java
  • Java遍历文件夹的两种方法(非递归和递归)

    import java.io.File;
    import java.util.LinkedList;
    public class FileSystem {
     
     public static int num;
     
        public static void main(String[] args) {
           
            long a = System.currentTimeMillis();
            //String path="c:";
            num=0;
            String[] lists={"c:","d:"};
            /*
            for(int i=0;i<lists.length;i++){
             File file=new File(lists[i]);
             scanDirRecursion(file);
            */
            for(int i=0;i<lists.length;i++){
                scanDirNoRecursion(lists[i]);
            }
           
            System.out.print("文件总数:"+num);
            System.out.print("总耗时:");
            System.out.println(System.currentTimeMillis() - a);
        }
       

        //非递归
        public static void scanDirNoRecursion(String path){
         LinkedList list = new LinkedList();
            File dir = new File(path);
            File file[] = dir.listFiles();
            for (int i = 0; i < file.length; i++) {
                if (file[i].isDirectory())
                    list.add(file[i]);
                else{
                    System.out.println(file[i].getAbsolutePath());
                    num++;
                }
            }
            File tmp;
            while (!list.isEmpty()) {
                tmp = (File)list.removeFirst();//首个目录
                if (tmp.isDirectory()) {
                    file = tmp.listFiles(); 
                    if (file == null)
                        continue;
                    for (int i = 0; i < file.length; i++) {
                        if (file[i].isDirectory())
                            list.add(file[i]);//目录则加入目录列表,关键
                        else{
                            System.out.println(file[i]);
                            num++;
                        }
                    }
                } else {
                    System.out.println(tmp);
                    num++;
                }
            }
        }


     //递归  
     public static void scanDirRecursion(File file) {
       try {
        if (file.canRead()) {
         if (file.isDirectory()) {
          String[] files = file.list();
          if (files != null) {
           for (int i = 0; i < files.length; i++) {
            scanDirRecursion(new File(file, files[i]));
           }
          }
         } else {
          //if (file.getName().endsWith("ppt"))
           System.out.println(file);
           num++;
         }
        }
       } catch (Exception e) {
        e.printStackTrace();
       }
     }
    }
    测试:

    (1)递归: 文件总数:189497  总耗时:39328

    (2)非递归:文件总数:189432 总耗时:37469

    非递归相对要好

  • 相关阅读:
    正向代理/反向代理理解、Nginx概述、安装及配置详解
    项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题
    Vue上传文件:ElementUI中的upload实现
    理解Vue的计算属性
    今天在CSDN看懂这个帖子,也是我的困惑,记录一下(过了三十的码农,你选择的是哪个,说出你的想法)
    WCF IIS上部署服务
    [转]WCF RESTful service and WebGrid in ASP.NET MVC 5
    WCF 与其它技术的比较
    Visual Studio Debug和Release的区别及obj的作用
    C# Json格式字符串
  • 原文地址:https://www.cnblogs.com/yangkai-cn/p/4016802.html
Copyright © 2011-2022 走看看