利用File类中的方法打印目录层级结构
第一步:首先了解File相关的使用方法;
File类中提供了方法:
- 判断是否是目录:public boolean isDirectory()
- 列出当前目录下所有文件(文件和目录):public File[ ] listFiles()
- 获取当前文件名称:public String getName()
第二步:采用递归的思想,因为listFiles()方法只能当前目录下的第一级信息,比如:当前目录是“\test\java\abc
”,此时该方法只列举出“\test\java
”。
所以思路就是:
- 列举出所有文件(文件和目录);
- 如果是文件,直接打印;如果是目录则递归调用。
第三步:为了使层级更加清晰,定义一个lever
变量,随着递归,每次+1.
具体实现如下:
public class PrintFile {
public static void main(String[] args) {
String directory = "D:"+File.separator+"test1";
//和本地目录系统相关联
File file = new File(directory);
int level = 0;
System.out.println(printLevel(level)+file.getName());
printListFiles(file,level+1);
}
private static String printLevel(int level){
StringBuilder sb = new StringBuilder();
sb.append("|");
for (int i = 0; i<level;i++){
sb.append("————");
}
return sb.toString();
}
private static void printListFiles(File file, int level){
//file 有可能是目录,文件
if(file.isDirectory()){
//列出当前目录下所有文件(目录,文件)
File[] files = file.listFiles();
if(files !=null){
//System.out.println("1111");
for(File f:files){
System.out.println(printLevel(level)+f.getName());
printListFiles(f,level+1);
}
}
}
}
}
测试输出结果如下: