最近在就纠结一个问题,听别人说遍历一个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次栈,能快吗?建议改成迭代算法