Java 7 WatchService - 文件打开时触发 ENTRY_MODIFY

标签 java watchservice

我有一个程序,可以使用 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/

相关文章:

JavaFX - 在指定目录中创建文件时如何创建新阶段(打开新窗口)?

java - 如何使用 Java 索引整个硬盘/文件系统?

java - 获取类路径上文件的绝对路径

java - Sqlite 不会保存添加的数据

java - 如何传递数组维度?

java.net.SocketException : Connection reset on Tomcat Only

java - 使用 Java 使应用程序显示在 GUI 中

java - 是否可以没有任何与 Smart GWT ComboBoxItem 关联的文本?

java - 为什么使用 WatchService 检测文件更改会出现延迟? ( java )

java - WatchService WatchEvent .context() 方法在 ENTRY_MODIFY 上返回不一致的文件相对路径(goutputstream-####,Linux 操作系统)