题目在下面的代码中,当我设置成aaa文件夹下有bbb.txt,ccc.txt,ddd.txt且eee文件夹,eee文件夹下有fff.txt,ggg.txt且还有fff文件夹,fff文件夹下有aaa1.txt,aaa2.txt,aaa3.txt时遍历就出现问题了 : 原先fff.txt以及ggg.txt应该和fff在同一层,然后fff的下一层是aaa1.txt,aaa2.txt,aaa3.txt
下面是程序运行后的结果:
F:\aaa
aaa
bbb.txt
ccc.txt
ddd.txt
eee
fff
aaa1.txt
aaa2.txt
aaa3.txt
fff.txt
ggg.txt
public class Test8 {
1 package study.test; 2 3 import java.io.File; 4 import java.util.Scanner; 5 //加一个判断语句,将文件夹的排列顺序放在最后 6 public class Test8 { 7 /*题目:从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如: 8 aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来 9 aaa 10 bbb.txt 11 ccc.txt 12 ddd.txt 13 14 eee 15 fff.txt 16 ggg.txt 17 下面是自己写的内容 18 分析: 19 1、创建键盘录入对象并输入路径 20 2、判断是否是文件夹路径(调用getDir方法) 21 3、创建文件对象数组并使用list方法获取 22 4、遍历数组,判断是否是文件,是文件则输出文件名,是文件夹则输出文件夹名并递归*/ 23 public static void main(String[] args) { 24 File dir = getDir(); 25 int num = 1; 26 //输出输入的文件夹名字 27 System.out.println(dir.getName()); 28 print(dir,num); 29 } 30 public static File getDir(){ 31 //1、新建键盘录入对象,并录入字符串 32 Scanner sc = new Scanner(System.in); 33 System.out.println("请输入路径:"); 34 //2、判断是否是文件夹路径(调用getDir方法) 35 while(true) { 36 String line = sc.nextLine(); 37 File file = new File(line); 38 if (!file.exists()) { 39 System.out.println("输入路径错误,请重新输入:"); 40 }else if(file.isFile()) { 41 System.out.println("输入的路径为文件路径,请重新输入:"); 42 }else if(file.isDirectory()){ 43 return file; 44 } 45 } 46 } 47 public static void print(File dir,int num) { 48 49 //3、创建文件对象数组并使用list方法获取 50 File[] files = dir.listFiles(); 51 for (File file : files) { 52 //4、遍历数组,判断是否是文件,是文件则输出文件名,是文件夹则输出文件夹名并递归 53 if(file.isFile()) { 54 for (int i = 0; i < num; i++) { 55 System.out.print(" "); 56 } 57 System.out.println(file.getName()); 58 }else if(file.isDirectory()) { 59 System.out.println(); 60 for (int i = 0; i < num; i++) { 61 System.out.print(" "); 62 } 63 System.out.println(file.getName()); 64 num++; 65 print(file,num); 66 } 67 } 68 } 69 }