gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:30 24 4
gpt4 key购买 nike

我需要对目录中最后访问的文件做一些事情。我如何知道当前对我的 visitFile() 的调用是否是最后一次调用?

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

最佳答案

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

编辑:如果您从 visitFile 而不是从 preVisitDirectory 返回 SKIP_SIBLINGSpostVisitDirectory 仍然会得到叫!

这是一个代码示例:

public 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);
}

关于java - 如何知道在 FileVisitor 中访问最后一个文件的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com