递归 --- 遍历指定目录下所有文件

时间:2022-12-24 12:39:22

1、递归定义
参考:http://blog.csdn.net/kyle0349/article/details/51836198
2、对于递归遍历文件夹目录下的文件思路:

 A、如果该文件目录下全是文件(非文件夹),那很理想,直接打印绝对路径(file.getAbsolutePath())就完成任务

B、重点在于如果该文件目录下有的是文件,有的是文件夹(子文件夹),然后子文件夹也存在相同问题,
判断是文件还是文件夹,或者可以认为:如果是文件就不是文件夹,或者:如果是文件夹,就不是文件
file.isFile() / file.isDirectory()

C、判断完后,如果是文件,那么打印绝对路径(file.getAbsolutePath())就完成任务
如果不是文件(也就是文件夹)呢,就重新调用自身showAllFiles(File folder),因为这个方法就是用来对付文件夹的,

(脑补:只要遇到文件夹就双击进该文件夹,进行判断,是文件,输出,不是双击进去…重复…重复)

package cn.test;

import java.io.File;

/**
* 递归遍历文件夹下所有文件
* @author admin
*
*/

public class Recursion2 {

static int count = 0 ;

public static void main(String[] args) {
//确定目标路径
File folder = new File("d:/");
if(!folder.exists() || !folder.isDirectory()){
System.out.println("文件夹路径错误,文件夹不存在 ,或者该路径不是一个合法的文件夹");
}else{
showAllFiles(folder);
}

}

private static void showAllFiles(File folder) {
File[] files = folder.listFiles();
for(File file:files){
if(file.isFile()){
count ++; //记录文件个数
System.out.println(file.getAbsolutePath());//输出文件的绝对路径:包含文件名
System.out.println("文件数:"+count);
}else{
try {
showAllFiles(file);//如果是文件夹,则调用自身showAllFiles(File folder)来把该文件夹目录下文件显示出来
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

递归 --- 遍历指定目录下所有文件