非递归方式
public static void noRecursion(File dir){
int fileNum=0,folderNum=0;
LinkedList<File> list=new LinkedList<File>();
if(dir.exists()){
if (null==dir.listFiles()){
return;
}
list.addAll(Arrays.asList(dir.listFiles()));
while(!list.isEmpty()){
File[] files = list.removeFirst().listFiles();
if(null==files){
continue;
}
for (File f:files) {
if (f.isDirectory()) {
System.out.println("文件夹:" + f.getAbsolutePath());
list.add(f);
folderNum++;
} else {
System.out.println("文件:" + f.getAbsolutePath());
fileNum++;
}
}
}
}else{
System.out.println("文件不存在!");
}
System.out.println("文件夹数量:" + folderNum + ",文件数量:" + fileNum);
}
递归方式
public static void showDir(File dir) {
if(dir.exists()){
//抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。
File[] files = dir.listFiles();
if(null!=files){
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
showDir(files[i]);
} else {
System.out.println(files[i]);
}
}
}
}else{
System.out.println("文件不存在!");
}
}
性能比较
public static void main(String[] args) {
System.out.println("------------------------------------------递归开始--------------------------------------------------------");
long start = System.currentTimeMillis();
showDir(new File("D:\IDEAProject\helloMi"));
long end = System.currentTimeMillis();
long num1=end-start;
System.out.println("---------------------递归结束-----------------------");
System.out.println("-------------------- 非递归开始----------------------");
start=System.currentTimeMillis();
noRecursion(new File("D:\IDEAProject\helloMi"));
end=System.currentTimeMillis();
System.out.println("---------------------非递归结束----------------------");
long num2=end-start;
System.out.println("-------------------------递归用时:"+num1);
System.out.println("-------------------------非递归用时:"+num2);
}
结果:
-------------------------递归用时:18
-------------------------非递归用时:20