/*
*需求:对指定目录进行所有内容的列出(包含子目录中的内容)
*也可以理解为深度遍历
*分析:listFiles方法只会列出当前目录下的所有文件
*但是如果需要访问当前目录下的文件下的文件,
* 那还要对listFiles方法
*进一步操作
*
*/
public class FileTest {
public static void main(String[] args) {
//1,建立当前文件
File file = new File("demodir");
//2,需要进行扩展,用函数封装起来
enlistAll(file,0);
}
public static void listAll(File file) {
/*
* listFiles方法返回一个File对象数组,
* 将当前目录下所有文件封装成file对象
* 这样不仅仅局限于对文件名的操作。
*/
/*
* 3,分析过程,思考过程
*
*/
/*File[] dir = file.listFiles();
for(File name:dir){
if(name.isDirectory()){//判断是否是目录
//如果是目录,就继续遍历
File[] dir2 = name.listFiles();
for(File name2:dir2){
if(name.isDirectory()){.....};
* 写到这发现端倪了,如果还是目录还要继续遍历
* 我们发现,我们再重复调用这个函数,
* 想到要用到递归!
}
}
//无论是否是目录都要打印出文件名
System.out.println(name);
}*/
}
/*
*重新建立这个函数,加个参数level 用来表示层级关系
*/
public static void enlistAll(File file,int level) {
//每调用一次就打印一次这个文件 getspace方法是为了区别层级而设的
System.out.println(getSpace(level)+file.getName());
level++;
File[] dir = file.listFiles();
for(File name:dir){
//判断是否是目录,是就重复进行,调用当前函数(递归)
if(name.isDirectory()){
enlistAll(name,level);
}else{
System.out.println(getSpace(level)+name.getName());
}
}
}
public static String getSpace(int level ) {
StringBuilder sb = new StringBuilder();
sb.append("|----");
for(int i = 0;i<level;i++){
sb.insert(0," ");
}
return sb.toString();
}}
打印效果