java.nio.file 包未检测到目录更改

java.nio.file package not detecting directory changes

我想检测正在写入目录的文件,因此认为 Java NIO 包比较合适。但是,我有 运行 他们的测试代码 (https://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java) 并且它只会检测机器 运行 对脚本所做的文件更改。 也就是说,我们有多个服务器 运行ning,它们共享许多已安装的驱动器。如果我登录到这些服务器之一,运行 测试代码,通过另一个终端再次登录到同一台机器并更改我正在观看的目录,这些更改将被检测到。但是,如果我登录到不同的服务器,则不会发生这些更改。这是 NIO 的基本问题吗,在这种情况下我应该使用其他东西,还是有解决方法?

它有点想警告你:WatchService

Platform dependencies

[...]

If a watched file is not located on a local storage device then it is implementation specific if changes to the file can be detected. In particular, it is not required that changes to files carried out on remote systems be detected.

恐怕您需要定期手动轮询。

这不一定是 Java NIO 的问题。

这在很大程度上取决于整体堆栈,例如:使用了哪些文件系统,以及服务器上 运行 的操作系统。

示例:当您有一个服务器 X 在共享文件系统(例如 AFS)上创建一个新文件时,然后 另一个查看共享目录的 服务器可能 看到有新文件。但是只要文件被写入,你就需要登录 X 才能看到最新的写入。只有当写入过程完成并关闭文件时,写入的内容才会对其他服务器可见

因此,如前所述,真正的答案是研究您正在使用的文件系统/服务器的特性 OS(es)。很好 aligns/explains 另一个答案是这样说的: Java NIO 不能给你通用的保证,因为确切的行为是特定于实现的。