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

非递归相对要好

最新文章

  1. Samba服务配置简明笔记
  2. MVC 中301永久重定向
  3. Python 迭代器&amp;生成器
  4. 使用ssh-keygen设置ssh无密码登录
  5. web sql Database
  6. 【HDOJ】1558 Segment set
  7. Chromium Graphics: GPUclient的原理和实现分析之间的同步机制-Part I
  8. openstack私有云布署实践【9.1 Glance镜像管理(科兴环境)】
  9. 重新认识一个强大的 Gson
  10. Gotorch - 多机定时任务管理系统
  11. 【转】awk 里的substr函数用法举例
  12. Java并发之ReentrantLock
  13. JDK8 lameda表达式学习例子
  14. eclipse maven .jar中没有主清单属性
  15. web界面直连MySql数据库
  16. SPLAY,LCT学习笔记(一)
  17. 简单的RNN和BP多层网络之间的区别
  18. MYSQL拒绝访问:not allowed to connect解决方法
  19. 在EntityFramework6中管理DbContext的正确方式——2DbContext的默认行为(外文翻译)
  20. PDF文档转换为图片、图片转成PDF 及PDF合并

热门文章

  1. (最全最灵活地)利用Jxl工具包实现Excel表的内容读取 、写入(可向已有表中追加数据)
  2. 【转】Rendering Problems The following classes could not be instantiated
  3. tensorflow C++接口调用图像分类pb模型代码
  4. HDU-1875 畅通工程再续(最小生成树+判断是否存在)
  5. 解决LoadRunner服务器返回乱码
  6. 关于汽车诊断OBD的理解(ISO15031-5)(转发)
  7. [Algo] 280. Sort With 2 Stacks
  8. 1)PHP基础介绍
  9. elasticsearch minhash 测试应用
  10. @interface 注解详解