从文本文件中读取文件夹结构并创建结构 - java

时间:2016-02-07 20:38:56

标签: java readfile

我的文本文件包含以下内容列出文件夹结构:

`clock': wrong number of arguments (1 for 0) (ArgumentError)

有没有更好的方法来实现java程序来解决这类问题?或者我只需要阅读文件中的每一行?

我是Java的新手,不知道在Java中读取文件有哪些更好的库。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果要创建目录和文件,最后应该将absolutePaths添加为输入。如果您想通过文件执行此操作,如上所述,我建议您将一个文件的abolutePath存储在一行中。例如:
root1 / folder1 / file1
root1 / folder2 / file2
root2 / folder2 / file3
在这种情况下,它更有效,更快速地读取程序中的路径我认为,从文件中。然后你可以使用mkdirs()和createNewFile()。
另一方面,您还应该考虑操作系统的文件分隔符。如果要以编程方式将新路径添加到文件中,则应使用File.separator常量。 (或者,如果手动编写数据,则应使用相同的分隔符。)

答案 1 :(得分:0)

我认为这是一项非常具体的任务,因此我不知道任何能够为您提供开箱即用的库。主要思想是你想要记下处理过的生产线的当前祖先。你可以用堆栈来做。我想知道我的算法是否真的有效,所以我编写了它并且确实有效:)希望它有所帮助。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class DirStuctureReader {

  private static final int INDENTATION = 4;

  public static void main(String[] args) throws Exception {
    Directory result = new DirStuctureReader().read(new File("testfile.txt"));
    System.out.println(result);
  }

  public Directory read(File file) throws IOException {
    Scanner scanner = new Scanner(file);
    Stack<Directory> directoryStack = new Stack<>();
    Directory root = new Directory("/"); // a root directory for everything
    directoryStack.add(root);
    while (scanner.hasNextLine()) {
      processLine(scanner.nextLine(), directoryStack);
    }

    return root;
  }

  private void processLine(String line, Stack<Directory> directoryStack) {
    int nLeadingSpaces = getNumberOfLeadingSpaces(line);
    if (nLeadingSpaces == -1) return;
    int depth = nLeadingSpaces / INDENTATION;
    while (directoryStack.size() > depth + 1) {
      directoryStack.pop(); // discard elements from the stack when we are deep and jump up one or more levels
    }
    String dirName = line.substring(nLeadingSpaces + 1);
    Directory directory = new Directory(dirName);
    directoryStack.peek().getChildren().add(directory); // add the directory to the children of the proper parent dir
    directoryStack.push(directory);
  }

  private int getNumberOfLeadingSpaces(String line) {
    for (int i = 0; i < line.length(); i++) {
      if (line.charAt(i) != ' ') return i;
    }

    return -1;
  }

  public static class Directory {
    private List<Directory> children = new ArrayList<>();

    private final String name;

    public Directory(String name) {
      this.name = name;
    }

    public String getName() {
      return name;
    }

    public List<Directory> getChildren() {
      return children;
    }
  }
}