即使文件不存在(最近删除的文件),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(),后者调用 Files.newDirectoryStream()。我能想到的唯一解释是 Files.newDirectoryStream 返回一个包含已删除文件的 DirectoryStream 。