我想检测正在写入目录的文件,因此认为Java NIO软件包将是合适的。但是,我已经运行了他们的测试人员代码(https://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java) 并且它将仅检测运行脚本的计算机所做的文件更改。 即我们有多个正在运行的服务器,它们共享许多已安装的驱动器。如果我登录到其中一台服务器,运行测试代码,通过另一个终端再次登录到同一台计算机,然后更改我正在监视的目录,则将检测到这些更改。但是,如果我登录到其他服务器,则不会发生这些更改。这是NIO的基本问题,在这种情况下,我还应该使用其他东西还是有解决方法?
答案 0 :(得分:2)
这有点想警告您:WatchService
平台依赖项
[...]
如果监视的文件不在本地存储设备上,则为 具体实现是否可以检测到文件更改。在 特别是,不需要更改对 检测到远程系统。
恐怕您需要定期手动轮询。
答案 1 :(得分:1)
Java NIO的探查不一定是问题。
这在很大程度上取决于整个堆栈,例如:使用哪些文件系统以及服务器上正在运行哪些操作系统。
示例:当您有一台服务器X在共享文件系统(例如AFS)上创建新文件时,另一台服务器查看共享目录可能只是 看到有一个新文件。但是,只要写入文件,您就需要登录X以查看最新的写入。只有在完成写入过程并关闭文件后,写入的内容才能对其他服务器可见。
因此,正如所说的,真正的答案是研究您正在使用的文件系统/服务器OS的特性。它很好地对齐/解释了其他答案的含义:Java NIO无法为您提供通用保证,因为确切的行为是特定于实现的。