思路
- 需要遍历的文件夹 File
- 使用listFile列出下级文件及文件夹
- 判断得到的list是否为空,为空则输出当前文件夹名称
- 如果不为空,逐个判断是文件还是文件夹
- 如果是文件,输出文件名
- 如果是文件夹, 回到2步骤
从第2到第6封装成方法,使用递归的思想遍历。
代码
import java.io.File;
public class ListFile
{
static int COUNT = -1;//文件序号,由于首次传入文件夹也会导致COUNT加1
static int SPACE = 0;//文件夹大小
public static void main(String[] args){
//1.需要遍历的文件夹 File
//2.使用listFiles列出下级文件及文件夹
//3.判断得到的list是否为空,为空则输出当前文件夹名称
//4.如果不为空,逐个判断是文件还是文件夹
//5.如果是文件,输出文件名
//6.如果是文件夹, 回到2步骤
//1.需要遍历的文件夹
File directory = new File("D:\遍历测试文件夹");
//调用遍历方法
bianLi(directory);
System.out.println("文件夹""+directory.getAbsolutePath()
+""已遍历完成!文件夹大小为:"+SPACE+"B,包含了文件及文件夹共"+COUNT-1+"个!");
}
//遍历方法
public static void bianLi(File directory){
COUNT++;
System.out.println(COUNT+":"+directory.getAbsolutePath()+" 非空文件夹");
//2.列出下级文件及目录
File[] fileList = directory.listFiles();
//3.判断得到的list是否为空,为空则输出当前文件夹名称
if(fileList.length == 0){
COUNT++;
System.out.println(COUNT+":"+directory.getAbsolutePath()+" 空文件夹");
return;
}
//4.如果不为空,逐个判断是文件还是文件夹
for(File file : fileList){
//5.如果是文件,输出文件名
if(file.isFile()){
COUNT++;
SPACE += file.length();
System.err.println(COUNT+":"+file.getAbsolutePath()+" 文件");
}else{//6.1 如果是文件夹
bianLi(file);//6.2 回到2步骤
}
}
}
}
演示

