创建目录树

时间:2011-10-29 21:16:24

标签: java path tree directory traversal

对于我正在尝试创建目录树的程序。所以我的程序的第一部分使用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 :(得分:0)

您需要实施preVisitDirectory, postVisitDirectory and visitFile。并且您需要在访问实施中保留“当前节点”。

  • 在预创建新节点之前,将其添加到currentNode,然后设置currentNode = newNode
  • 在visitFile中创建一个新的叶节点并将其添加到currentNode
  • 在帖子集currentNode = currentNode.getParent()

有点像堆叠操作,您可以在preVisit中“推送”并在postVisit中“弹出”。