java - 迭代 DirectoryStream 并同时更改目录的内容

标签 java file-io java-7 directory-structure

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.

在我的机器上,我在 Debug模式下对一个目录执行了一次简单的迭代。在迭代完成之前,我中断了执行,将一个文件添加到正在迭代并恢复的目录中。迭代没有看到额外的文件。

我的问题:在什么情况下迭代反射(reflect)目录内容的更新? 不幸的是,正式文档对此非常模糊。至少可以说。

最佳答案

文档故意含糊不清。 JVM 必须在多种不同类型的机器上运行:Windows 和 Unix 衍生机器。不同的文件系统有不同的行为。如果您希望您的程序在多台计算机上可靠地工作,您必须(我再说一遍,必须)针对最坏的情况进行设计。

最小惊奇法则建议您应该吞噬整个 DirectoryStream 以获得快照(或非常接近快照),遍历快照,然后重新吞噬流。然后,您可以比较不同版本的快照以确定对底层目录的更改。

关于java - 迭代 DirectoryStream 并同时更改目录的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131941/

相关文章:

java - 如何在 Java 中一致生成正确的 SHA-384 哈希字符串

Java clone() 方法

c++ - 什么是 Matlabs `fread(fp, 1, ' int3 2')` 和 fread(fp, n, 'uchar' ) 的 C++ 翻译

java - 使用 NIO2 API 时摆脱检查异常

java - 泛型:通配符类型的编译错误

java - 如何使用 json 从 REST Web 服务检索图像

java - 为什么在子类中找不到具有默认访问修饰符的实例变量?

c++ - fstream 中的 linux 路径

c# - 如何利用磁盘 IO 队列

java - 如何从自定义对象列表中获取特定属性值的数组