有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何做文件夹和文件的递归树?

我已经编写了一个程序,它接收一个文件作为第一个参数,并打印出一棵树,但我希望它不仅仅是检查输入文件/文件夹包含的子目录或文件

import java.io.File;

public class DN12 {
    public static void main(String[] args)throws Exception {
        File file = new File(args[0]);
        String fPath = file.getPath();
        System.out.println(fPath);
        File[] paths = file.listFiles();
        for(int i=0; i<paths.length; i++) {
            String path2 = paths[i].getPath();
            String[] path3 = path2.split("/");
            System.out.println("  |___"+path3[path3.length-1]);
        }  
    }
}

输入示例:

/p2/sources

我的输出:

/p2/viri
  |___sun.txt
  |___tree
  |___abc.txt

预期产出:

/p2/viri
  |___sun.txt
  |___tree
  |  |___.DS_Store
  |  |___dir1
  |  |  |___dir11
  |  |  |  |___b.txt
  |  |  |___a.txt
  |  |___src
  |  |  |___predavanja11
  |  |  |  |___TestDrzava.java
  |  |  |  |___Dnevi.java
  |  |  |  |___Drzave.java
  |  |  |  |___Oseba.java
  |  |  |  |___Delitelji.java
  |  |  |  |___Drzava.java
  |  |  |  |___Meseci.java
  |  |  |  |___TestOseba.java
  |  |___dir2
  |  |  |___dir21
  |  |  |___dir22
  |  |  |  |___e.txt
  |  |  |___d.txt
  |___abc.txt

共 (3) 个答案

  1. # 1 楼答案

    public class Main {
    
      public static void main(String[] args) {
        new Main().fooCursive(new File(System.getProperty("user.dir")));
    
      }
    
      public void fooCursive(File file) {
        System.out.println(file.getName());
        if (file.exists() && file.isDirectory()) {
          Stream.of(file.listFiles()).forEach(subfile -> fooCursive(subfile));
        }
      }
    }
    
  2. # 2 楼答案

    你可以这样做:

    public static void main(String[] args) {
        displayDirRecursively("sources", 0);
    }
    
    public static void displayDirRecursively(String directory, int depth) {
        File file = new File(directory);
        if (depth > 0) {
            for (int i = 0; i < depth; i++) {
                System.out.print("   ");
            }
            System.out.print("|__");
        }
        System.out.println(file.getName());
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                displayDirRecursively(files[i].getPath(), depth + 1);
            }
        }
    }
    
  3. # 3 楼答案

    您需要定义一个递归方法。在javaish伪代码中

    public static void listFiles(File f, int spaces) {
        String s = <BUILD STRING OF SPACES>;
        System.out.println(s + <YOUR_FILE_PRINT>);
        // print current file
        for (File f : f.listPaths()) {
            // Do printing.
            if (f.isDirectory()) {
                listFiles(f, spaces + 2); // recursive call
            }
        }
    }
    

    递归方法需要有一个基本情况。在这种情况下,只有当它是一个目录并且堆栈总是展开时,我们才会递归