Создание дерева каталогов - PullRequest
       21

Создание дерева каталогов

1 голос
/ 30 октября 2011

Для программы я пытаюсь создать дерево каталогов.Итак, первая часть моей программы использует Paths для обхода нужного мне каталога:

public static void main(String[] args) throws IOException {
    Path startingDir = Paths.get("/home/somedirectory");
    PrintFiles pf = new PrintFiles();
    Files.walkFileTree(startingDir, pf);

}

и программы PrintFiles (я непосредственно скопировал это из руководства по использованию путей для обхода дерева) http://download.oracle.com/javase/tutorial/essential/io/walk.html:

public static class PrintFiles extends SimpleFileVisitor<Path> {

    //Print information about each type of file.
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
        if (attr.isSymbolicLink()) {
            System.out.format("Symbolic link: %s ", file);
        } else if (attr.isRegularFile()) {
            System.out.format("Regular file: %s ", file);
        } else {
            System.out.format("Other: %s ", file);
        }
        System.out.println("(" + attr.size() + "bytes)");
        return CONTINUE;
    }

 //Print each directory visited.
    @Override
    public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
        System.out.format("Directory: %s%n", dir);
        return CONTINUE;
    }

    public FileVisitResult visitFileFailed(Path file, IOException exc) {
        System.err.println(exc);
        return CONTINUE;
    }

}

У меня также есть универсальная древовидная программа, которая создает дерево с любым количеством узлов, с типичными функциями добавления узлов, удаления узлов и т. Д. (Я не собираюсь публиковатькод, потому что он длинный, и я не думаю, что это действительно необходимо, поскольку это довольно стандартная реализация)

Мой вопрос: как именно я могу сделать что-то, где я могу создать общее дерево, которое представляет дерево каталогов для моего конкретного каталога?Я не совсем знаком с тем, как работают библиотеки Path и File.

Спасибо, Кевин

1 Ответ

0 голосов
/ 30 октября 2011

Вам нужно будет реализовать preVisitDirectory, postVisitDirectory and visitFile.И вам нужно будет удерживать «текущий узел» в вашей реализации посещения.

  • При предварительном создании нового узла добавьте его в currentNode и затем установите currentNode = newNode
  • В visitFile создайте новый листовой узел и добавьте его в currentNode
  • В наборе записей currentNode = currentNode.getParent()

Так что это похоже на операцию стека, где вы "проталкиваете" preVisit и "pop" в postVisit.

...