我希望检测到写入目录的文件,因此认为Java包是合适的。但是,我已经运行了他们的测试程序代码(https://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java),它只会检测运行脚本的机器所做的文件更改。也就是说,我们有多个服务器正在运行,这些服务器共享许多挂载驱动器。如果我登录到这些服务器之一,运行测试代码,再次通过另一个终端登录到同一台计算机,并对我所监视的目录进行更改,这些更改将被检测到。但是,如果我登录到另一台服务器,则不会发生这些更改。这是NIO的根本问题吗?在这种情况下,我是否应该使用其他的东西,或者有解决办法?
发布于 2018-08-14 09:33:55
它试图警告你:WatchService
平台依赖性 ..。 如果被监视的文件不在本地存储设备上,那么如果可以检测到对该文件的更改,则该文件的实现是特定的。特别是,不需要检测到远程系统上执行的文件的更改。
恐怕您需要定期手动投票。
发布于 2018-08-14 09:34:16
这不一定是Java的一个问题。
这在很大程度上取决于整个堆栈,如:所使用的文件系统,以及在服务器上运行的操作系统。
示例:当有一个服务器X在共享文件系统(例如AFS )上创建一个新文件时,另一个查看共享目录的服务器可能只会看到一个新文件。但是,只要文件被写入,您就需要登录到X中来查看最新的写操作。只有在完成写入过程并关闭文件时,编写的内容才会对其他服务器可见。
因此,如前所述,真正的答案是研究您正在使用的文件系统/服务器操作系统(Es)的特性。它很好地对齐/解释了另一个答案是什么: Java不能为您提供一般的保证,因为确切的行为是特定于实现的。
https://stackoverflow.com/questions/51838123
复制相似问题