【问题标题】:Recursive method doesn't work with FileWriter递归方法不适用于 FileWriter
【发布时间】:2020-12-28 08:38:04
【问题描述】:

我有一个方法应该在文件中写下树视图中给定目录的结构。但它不会记下子文件夹及其文件,所以我尝试添加递归调用,但由于某种原因它不起作用。我该如何解决?

public void readFiles() {
        File baseDirectory = new File(path);
        if (baseDirectory.isDirectory()) {
            try (FileWriter writer = new FileWriter("D:/info.txt")) {
                for (File file : baseDirectory.listFiles()) {
                        if (file.isFile()) {
                            writer.append(" |------ " + file.getName());
                            writer.append("\n");
                        } else if (file.isDirectory()) {
                            writer.append(" |+++++ " + file.getName());
                            writer.append("\n");
                            path = file.getPath().replace("\\", "/");
                            readFiles(); // recursive call here

                        }
                }
                writer.flush();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

主类:

public class Runner {
    public static void main(String[] args) {
        TreeViewer treeViewer = new TreeViewer();
        treeViewer.setPath("D:/test");
        treeViewer.readFiles();
    }
}

[输出文件示例:][1]

【问题讨论】:

  • 您是否尝试过调试它以查看它是否进入文件夹并进行递归调用?
  • 递归调用也会多次执行new FileWriter("D:/info.txt")。这可能不应该是递归的一部分,而是应该只创建一次编写器。此外,如果 path 不是字段而是 readFiles 方法的参数,则代码可能会更好地维护。

标签: java io filewriter


【解决方案1】:

试试这个。

static void tree(File file, String indent, Writer out) throws IOException {
    out.write(indent + file.getName() + System.lineSeparator());
    if (file.isDirectory())
        for (File child : file.listFiles())
            tree(child, indent + "  ", out);
}

public static void main(String[] args) throws IOException {
    try (Writer out = new FileWriter("D:/info.txt")) {
        tree(new File("D:/test"), "", out);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2019-08-04
    • 2017-08-05
    • 2016-12-11
    • 1970-01-01
    • 2021-08-02
    • 2022-01-04
    相关资源
    最近更新 更多