我有一个可以监听目录并响应指定事件的工作代码。它在Linux和Mac上都经过了测试,但在生产环境中部署后,发现被监视的目录是一个NFS挂载点。由于WatchService在Linux上运行时使用inotify,因此从未触发任何事件,因为NFS挂载不会触发inotify事件(或类似问题),这里有更多信息解释了我的问题: Java WatchService not generating events while watching mapped drives。
既然我的代码已经编写完毕,我希望强制WatchService使用轮询实现而不是inotify实现。有方法可以做到这一点吗?
我通过找到sun.nio.fs.PollingWatchService源代码并直接创建对象(而不是使用FileSystems.getDefault().newWatchService())来尝试实现这一点,但是当将服务注册到路径时,我遇到了这个异常:java.nio.file.ProviderMismatchException。
那么,有什么想法吗?既然我已经使用了WatchService和WatchKey API实现了代码,那么只是强制轮询比使用自定义或第三方轮询器重新编写全部代码要容易得多。谢谢!
既然我的代码已经编写完毕,我希望强制WatchService使用轮询实现而不是inotify实现。有方法可以做到这一点吗?
我通过找到sun.nio.fs.PollingWatchService源代码并直接创建对象(而不是使用FileSystems.getDefault().newWatchService())来尝试实现这一点,但是当将服务注册到路径时,我遇到了这个异常:java.nio.file.ProviderMismatchException。
那么,有什么想法吗?既然我已经使用了WatchService和WatchKey API实现了代码,那么只是强制轮询比使用自定义或第三方轮询器重新编写全部代码要容易得多。谢谢!
File f = new File(YOUR_DIRECTORY, "_garbage.tmp"); new FileOutputStream(f).close(); f.delete();
,并监听文件名为"_garbage.tmp"
的文件创建事件如何? - k_g