首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能在一个不存在的文件上调用Java的FileVisitor.visitFile()?

有没有可能在一个不存在的文件上调用Java的FileVisitor.visitFile()?
EN

Stack Overflow用户
提问于 2014-08-22 05:00:58
回答 2查看 584关注 0票数 2

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

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2014-08-23 21:29:05

是的,这是可能的。

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

迭代器是弱一致的。它是线程安全的,但在迭代时不会冻结目录,因此它可能会(也可能不会)反映在创建DirectoryStream之后对目录进行的更新。

票数 4
EN

Stack Overflow用户

发布于 2014-08-28 01:37:30

是的,这是可能的。在我的例子中,必须满足以下条件才能重现失败:

Windows感兴趣的文件存在于indexed by Windows.

  • The文件类型的文件夹中,该文件夹具有与之关联的Windows Property Handler

  • 在删除文件之前有时间开始索引该文件。

  • 属性处理程序需要很长时间(几分钟)才能释放对该文件的保留。

我刚刚发现了所有这些信息,这就是为什么在最初的问题中没有提到这些信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25435838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档