/**
* 需求:对指定目录进行所有内容的列出,包括子目录内的文件
* 即对目录的深度遍历
*/
package cn.test.filedemo;
import java.io.File;
public class FileDemoTest {
public static void main(String[] args) {
File dir = new File("d:\\java");
listAll(dir,0);
}
//获取指定目录下的所有文件夹或者文件对象
//定义计数器统计目录层次
private static void listAll(File dir,int level) {
// TODO Auto-generated method stub
//拿到的是文件或者文件夹对象
System.out.println(getSpace(level)+dir.getName());
level++;
File[] files = dir.listFiles();
//只为遍历而不操作数据,使用foreach
for (int i = 0; i < files.length; i++) {
//判断遍历到的是否是目录
if(files[i].isDirectory()){
/**
* 递归:
* 函数自身间接或者直接的调用到了自身。
* 一个功能在被重复使用,并且每次使用,参与运算的结果和上一次调用有关。
* 这时可以用递归来解决问题。
* 递归必须是有进有出的,不能只进不出
* 递归一定要明确条件,否则容易栈溢出
* 注意递归的次数
*/
listAll(files[i],level);
}else{
System.out.println(getSpace(level)+files[i].getName());
}
}
}
//添加空格显示目录层次
private static String getSpace(int level) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append("|--");
for (int i = 0; i < level; i++) {
sb.insert(0," ");
}
return sb.toString();
}
}