将指定目录下的所有文件和文件夹的名字按层级关系打印,也可以从控制台获取需要打印的目录
按照如下样式:
world
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
hello.txt
javaSpring.txt
javaSpring.txt.bak
新建文件夹
101.txt
102.txt
文件2
文件夹1
201.txt
读取盘符根目录时,有些文件不可访问,或者隐藏类型的,不处理会出现空指针异常,需要加入空指针判断的操作
import java.io.File;
import java.util.Scanner;
//从键盘接收一个路径,按层级结构打印文件夹内容
public class FileTest06 {
public static int count=1;
public static void main(String[] args){
File f= getFile();
System.out.println( f.getName());
printFileByLine(f);
}
public static void printFileByLine(File f) {
File[] fileArr = f.listFiles();
if (fileArr==null) {
//如果该处文件不可访问,会出现空指针异常,在读取盘符根目录时,一般会出现空指针,要预防
return ;
}
if (fileArr.length==0){
//判断如果目录为空时,count计数自减,减小缩进
count--;
return;
}
for (int i = 0; i < fileArr.length; i++) {
//打印缩进
for (int j = 0; j < count; j++) {
System.out.print("\t");
}
//打印文件名字
if (fileArr[i].isFile()) {
System.out.println(fileArr[i].getName());
}
//判断,当达到文件的结尾并且最后一个不是文件夹的时候,count自减
if (i==fileArr.length-1&&!fileArr[i].isDirectory()){
count--;
}
if (fileArr[i].isDirectory()) {
//如果是文件夹,count自加,扩大缩进
System.out.println(fileArr[i].getName() );
count++;
printFileByLine(fileArr[i]);
}
}
}
public static File getFile() {
//从键盘接收一个路径
Scanner scanner=new Scanner(System.in);
System.out.println( "请输入一个路径:");
while(true) {
String path = scanner.nextLine();
File file = new File(path);
if (!file.exists()) {
System.out.println("输入路径错误,请重新输入");
} else if (file.isFile()) {
System.out.println("您输入的是一个文件,路径为: " + file.getAbsolutePath());
} else {
return file;
}
}
}
}
out:
world
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
hello.txt
javaSpring.txt
javaSpring.txt.bak
新建文件夹
101.txt
102.txt
文件2
文件夹1
201.txt