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

最佳答案

您需要定义一个递归方法。在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
        }
    }
}

递归方法需要有一个基本情况。在这种情况下,我们仅在目录是目录时才进行递归,并且堆栈始终展开。

关于java - 如何制作文件夹和文件的递归树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50555663/

相关文章:

java - spring mvc+ajax 获取点击数据

java - 嵌套属性比较

java - 正则表达式检查字符串第一个字符是否是数字

java - 在Java 1.3中实现UncaughtExceptionHandler

java - 出现异常时如何使用接口(interface)将接口(interface)与技术实现分离

java - 带参数执行

java - Resteasy 和文件上传 : get no content-disposition error

java - Android - 使用另一个 Java 类对 TextView 进行排序

java - 如何验证 hibernate.jdbc.batch_size 是否正常工作?

java - 如何在java中使用selenium查找该字段是否不可编辑