日期:2014-05-20  浏览次数:20766 次

java遍历秒现
最近在就纠结一个问题,听别人说遍历一个10W文件的磁盘能做到秒现,只是怎么能做到秒现的,我是初学者,希望各位大侠指点指点下面是我自己写的程序,遍历一次也要30秒吧
Java code

package test.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class AllFile {

    static File newFile = new File("F:" + File.separator + "test01.txt");
    static int count = 1;
    public static void main(String[] args) {
        showAllFile(new File("C:"+File.separator));
    }
    static void showAllFile(File file){
        if(file.isFile()){
            try {
                FileOutputStream fos = new FileOutputStream(newFile,true);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            count++;
        }else if (file.isDirectory()) {
            File list[] = file.listFiles();
            if (list != null) {
                //使用递归获取每个文件夹
                for (File ls : list) {
                    showAllFile(ls);
                    System.out.println(ls);
                    System.out.println(count);
                }
            }
        }
    }

}




------解决方案--------------------
一般提高遍历就是建立一个引索,存放文件名和修改时间
从根目录开始根据修改时间判断是否要进入文件夹递归
这样能少做很多递归~节提高了效率咯
还有就是递归效率普遍比迭代要低的。递归10次就要挂着10个方法,底层来说就是压了10次栈,还要再出10次栈,能快吗?建议改成迭代算法