需求

从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印

  1. 005IO
  2. other
  3. access_file.txt
  4. ......
  5. src
  6. cn
  7. giteasy
  8. test
  9. Test1.java
  10. Test2.java
  11. Test3.java
  12. ......
  13. ......
  14. ......

分析

  1. 获取所有文件和文件夹,返回的File数组
  2. 遍历数组
  3. 无论是文件还是文件夹,都需要直接打印
  4. 如果是文件夹,递归调用

    实现

    1. public static File getDir() {
    2. //1.创建键盘录入对象
    3. Scanner sc = new Scanner(System.in);
    4. System.out.println("请输入一个文件夹路径:");
    5. //2.定义一个无限循环
    6. while(true) {
    7. //3.将键盘录入的结果存储并封装成File对象
    8. String line = sc.nextLine();
    9. File dir = new File(line);
    10. //4.对File对象判断
    11. if(!dir.exists()) {
    12. System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:");
    13. }else if(dir.isFile()) {
    14. System.out.println("您录入的是文件路径,请输入一个文件夹路径:");
    15. }else {
    16. //5.将文件夹路径对象返回
    17. return dir;
    18. }
    19. }
    20. }
    1. public static void printLev(File dir,int lev) {
    2. //1.把文件夹中的所有文件以及文件夹的名字按层级打印
    3. File[] subFiles = dir.listFiles();
    4. //2.遍历数组
    5. for (File subFile : subFiles) {
    6. for(int i = 0; i <= lev; i++) {
    7. System.out.print("\t");
    8. }
    9. //3.无论是文件还是文件夹,都需要直接打印
    10. //System.out.println(subFile);
    11. System.out.println(subFile.getName());
    12. //4.如果是文件夹,递归调用
    13. if(subFile.isDirectory()) {
    14. //printLev(subFile,lev + 1);
    15. printLev(subFile,++lev);
    16. }
    17. }
    18. }
    1. public static void main(String[] args) {
    2. File dir = getDir();
    3. printLev(dir,0);
    4. }