我有一个程序,可以使用 WatchService
监视目录中的文件更新。
当我修改文件时我收到事件。但是,我注意到,即使我在 vi 中打开文件,并且不修改其内容,也会调用监视服务 poll
方法。
我的代码如下:
watcher = FileSystems.getDefault().newWatchService();
Path path = Paths.get("conf");
path.register(watcher, ENTRY_MODIFY);
WatchKey key = null;
key = watcher.poll(MAX_WAIT_TIME, TimeUnit.SECONDS);
if (key != null) {
for (WatchEvent<?> events : key.pollEvents()) {
WatchEvent<Path> ev = cast(events);
Path fileName = ev.context();
}
在上面的代码中,watcher.poll 等待 MAX_WAIT_TIME
等待 ENTRY_MODIFY
事件。但是,当我打开正在监视的目录中的文件,然后关闭而不更改其内容时... watcher.poll 接收事件并停止等待。
是否有一些参数需要设置而我丢失了?
最佳答案
如果您在关闭之前保存文件,即使文件没有任何更改,操作系统也会将其视为已修改的文件,并且这些将触发 ENTRY_MODIFY 事件。 此外,您的代码仅使用一个 watch 键。如果您想继续监视该目录,您需要将 watcher.poll 指令放入循环中。
关于Java 7 WatchService - 文件打开时触发 ENTRY_MODIFY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406401/