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

时间:2018-08-14 09:27:03

标签: java nio

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

2 个答案:

答案 0 :(得分:2)

这有点想警告您:WatchService

  

平台依赖项

     

[...]

     

如果监视的文件不在本地存储设备上,则为   具体实现是否可以检测到文件更改。在   特别是,不需要更改对   检测到远程系统。

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

答案 1 :(得分:1)

Java NIO的探查不一定是问题。

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

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

因此,正如所说的,真正的答案是研究您正在使用的文件系统/服务器OS的特性。它很好地对齐/解释了其他答案的含义:Java NIO无法为您提供通用保证,因为确切的行为是特定于实现的。