对于我正在尝试创建目录树的程序。所以我的程序的第一部分使用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库的工作方式。
谢谢, 凯文
答案 0 :(得分:0)
您需要实施preVisitDirectory, postVisitDirectory and visitFile
。并且您需要在访问实施中保留“当前节点”。
currentNode
,然后设置currentNode = newNode
currentNode
currentNode = currentNode.getParent()
有点像堆叠操作,您可以在preVisit
中“推送”并在postVisit
中“弹出”。