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. Powershell 中的管道

    管道 上个命令中的输出,通过管道作为下个命令的输入.Linux中的管道传递的是text,但ps中传递的是object.但是命令究竟返回的是什么类型呢?以下命令回答了这个问题: get-service ...

  2. 数组,字符串方法总结 Unicode 数字

    String.prototype.charCodeAt(index) 就是返回字符串中下标单个数值  对应的编码表的10进制表示数值 方法返回0到65535之间的整数,表示给定索引处的UTF-16代码 ...

  3. thrift生成c++服务端和客户端

    https://blog.csdn.net/jdx0909/article/details/84727523 https://blog.csdn.net/luoyexuge/article/detai ...

  4. 3.docker machine 连接 aliyun 远程docker 服务器

    1.在aliyun ecs 创建docker 服务器 docker-machine create -d aliyunecs machine-aliyunecs 2.远程连接 docker 获取客户端 ...

  5. Java自学-泛型 通配符

    Java 泛型通配符 ? extends super 的用法 示例 1 : ? extends ArrayList heroList<? extends Hero> 表示这是一个Hero泛 ...

  6. 四十、LAMP与LNMP加速与缓存优化进阶实战上部

    实例: 一. 所有服务器配置定时时间同步,必须通过web server上网. 有两种方式: 1.服务器A能进行上网,作为web server ,通过指定为ntp服务器,所有服务器访问这个服务器 2.服 ...

  7. Mongo学习记录

    引子 最近做项目利用mongo记录的日志做数据统计.着了非关系型数据库的迷,于是乎买了本<MongoDB实战>学习了一番.记录一下学习笔记,共享之. 准备 我在自己的Linux服务器上装了 ...

  8. Solving ordinary differential equations I(Nonstiff Problems),Exercise 1.2:A wrong solution

    (Newton 1671, “Problema II, Solutio particulare”). Solve the total differential equation $$3x^2-2ax+ ...

  9. 五、linux-mysql 下mysql的管理(二)

    1.插入语句: create  table test(  id int(4)  not null auto_increment,  name char(20)  not null,  primary ...

  10. 华为鸿蒙系统pk安卓系统

    Harmony OS Vs Android Comparison It isn’t based on Linux kernel The key difference between HarmonyOS ...