遍历给定路径下的所有文件(包括子文件夹),并打印出最大值文件和最小值文件的相关信息,代码未优化,速度有点寒碜,16万个文件遍历完共花费60000ms-62000ms,测试环境:i7 6500处理器。
import java.io.File;
public class TestFile {
private static int max=0;//记录最大文件的下标
private static int min=0;//记录最小文件的下标
private static File fmax;//存储最大文件
private static File fmin;//存储最小文件
private static File[] fls=new File[16];//存储遍历的所有文件
private static int i=0;//记录所有文件的下标
public static void listChild(File f) {
if(f.isDirectory()) {
File[] fs=f.listFiles();
if(fs!=null) {//如果此文件夹下无文件则退出此函数
for(File fl:fs) {
listChild(fl);//通过此递归函数遍历所有文件
}
}
}else {
if(i>=fls.length) {
File[] fls1=fls;
fls=new File[fls.length*2];
System.arraycopy(fls1,0, fls,0, fls1.length);;
}
fls[i]=f;
if(fls[max].length()<fls[i].length()) {
max=i;
fmax=fls[i];
}else if(fls[min].length()>fls[i].length()) {
min=i;
fmin=fls[i];
}
i++;
}
}
public static void main(String[] args) {
File f=new File("C:\\Windows");
System.out.println("正在遍历所有文件中。。。");
System.out.println("请稍等。。。");
long start=System.currentTimeMillis();
listChild(f);
long end=System.currentTimeMillis();
System.out.println("此算法共耗时:"+(end-start));
System.out.println("最大的文件的文件名为:"+fmax.getName());
System.out.println("最大文件的大小为:"+fmax.length());
System.out.println("最小的文件的文件名为:"+fmin.getName());
System.out.println("最小文件的大小为:"+fmin.length());
}
}