gpt4 book ai didi

java - Java 的 FileVisitor.visitFile() 是否可以在不存在的文件上调用?

转载 作者:行者123 更新时间:2023-12-03 01:45:19 30 4
gpt4 key购买 nike

即使文件不存在(最近删除的文件),Java 的 java.nio.file.Files.walkFileTree() 也会执行访问者的 VisitFile() 方法。

FileUtils.forceDelete(certainFile);
Files.exists(certainFile.toPath()); // Returns false, as expected
MySimpleFileVisitor visitor = new MySimpleFileVisitor(); // Extends SimpleFileVisitor. All it does is override visitFile() so I can see that it visits the deleted file.
Files.walkFileTree(directory, visitor); // Calls visitor.visitFile on certainFile. Not expected!

这可能吗?我使用的是 Windows,文件位于网络驱动器上。

Files.walkFileTree() 调用 FileTreeWalker.walk(),FileTreeWalker.walk() 又调用 Files.newDirectoryStream()。我能想到的唯一解释是 Files.newDirectoryStream 返回一个包含已删除文件的 DirectoryStream。

最佳答案

是的,这是可能的。

让我们假设 Files.walk... 方法都使用 DirectoryStreams 来遍历文件树(至少从 Java 1.8.0_05 开始,它们实际上是这样做的)或内部等效方法。 documentation for DirectoryStream说:

The iterator is weakly consistent. It is thread safe but does not freeze the directory while iterating, so it may (or may not) reflect updates to the directory that occur after the DirectoryStream is created.

关于java - Java 的 FileVisitor.visitFile() 是否可以在不存在的文件上调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435838/

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