如何知道FileVisitor中访问最后一个文件的时间?

时间:2012-05-01 12:36:30

标签: java file-io java-7 java.nio.file nio2

我需要对目录中最后访问的文件执行某些操作。如何知道当前对visitFile()的呼叫是否是最后一次?

(我只想列出给定目录中的所有文件和目录。为此,我在我的depth实施和FileVisitor中引入了preVisitDirectory字段。如果深度大于0,我返回SKIP_SUBTREE。然后递增depth。)问题是我不知道何时将depth重置为0,因为当我使用此FileVisitor实现为另一个目录调用walkFileTreedepth已经> 0并且它只列出给定目录。)

1 个答案:

答案 0 :(得分:4)

如何仅在preVisitDirectorypostVisitDirectory两种方法中保持深度?您将在depth中增加preVisitDirectory并在postVisitDirectory中减少depth。您可能需要将-1初始化为depth == 0,以便在启动目录中时depth。这样,您将始终拥有正确的SKIP_SIBLINGS

修改:如果您从visitFile返回preVisitDirectory,而不是postVisitDirectorypublic class Java7FileVisitorExample { public void traverseFolder(Path start){ try { Files.walkFileTree(start, new SimpleFileVisitor<Path>() { private int depth = -1; @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("preVisitDirectory(" + dir + ")"); depth++; return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (depth > 0) { return FileVisitResult.SKIP_SIBLINGS; } System.out.println("visitFile(" + file + ", " + attrs + "): depth == " + depth); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { if (e == null) { depth--; System.out.println("postVisitDirectory(" + dir + ")"); return FileVisitResult.CONTINUE; } else { throw e; } } }); } catch (IOException ex) { Logger.getAnonymousLogger().throwing(getClass().getName(), "traverseFolder", ex); } } public static void main(String... args) { Path start = Paths.get("/Book/Algorithm"); new Java7FileVisitorExample().traverseFolder(start); } 仍会被调用!

以下是代码示例:

{{1}}

}