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

非递归相对要好

Java遍历文件夹的两种方法(非递归和递归)的更多相关文章

  1. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

    本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  2. java 遍历文件夹里的文件

    Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...

  3. 总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

    本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  4. JAVA 遍历文件夹下的所有文件

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  5. linux访问windows共享文件夹的两种方法

    有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到 ...

  6. JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  7. 转载:删除github上文件夹的两种方式

    http://www.jianshu.com/p/286be61bb9b8 删除github上文件夹的两种方式(解决已经加入ignore的文件夹无法从远程仓库删除的问题) 如果此文件夹已被加入git追 ...

  8. (转)linux访问windows共享文件夹的两种方法

    有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount ...

  9. Java遍历List集合的三种方法

    Java遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa") ...

随机推荐

  1. Java多线程求和

    package test; import java.util.concurrent.*; import java.util.concurrent.locks.Lock; import java.uti ...

  2. liunx常用命令笔记

    安装软件教程 linux安装java:https://www.cnblogs.com/lamp01/p/8932740.html linux安装mysql:https://www.cnblogs.co ...

  3. web标准介绍

    web标准介绍 web标准: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web标准规范的分类:结构标准.表现标准.行为标准. 结构:html.表示:cs ...

  4. 决策树分类回归,ID3,c4.5,CART,及其Python代码

    决策树模型 内部节点表示一个特征或者属性,叶子结点表示一个类.决策树工作时,从根节点开始,对实例的每个特征进行测试,根据测试结果,将实例分配到其子节点中,这时的每一个子节点对应着特征的一个取值,如此递 ...

  5. Gson使用指南(一)

    注:此系列基于Gson 2.4. 一.Gson的基本用法 Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化.同时每个方法都提供了 ...

  6. "finally block does not complete normally"警告解决

    转载地址:http://www.cnblogs.com/interdrp/p/4095846.html java里面不是可以保证finally一定会执行的么,为什么不可以在finally块做retur ...

  7. Tarjan算法:求解无向连通图图的割点(关节点)与桥(割边)

    1. 割点与连通度 在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点(Articulation Point).一个没有关节点的 ...

  8. Sublime Text 3 快捷键的汇总

    Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷键汇总. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按 ...

  9. shell并行处理

    for i in (file1 file2 file3), do process_a $i | tee process_a $i_a.txt | process_b > $i_b.txt &am ...

  10. Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated"}的解决方法

    左侧菜单栏时,发现点击路由跳转相同地址 会有这个报错 Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplic ...