【发布时间】:2021-01-24 10:51:29
【问题描述】:
我正在尝试使用 Java File Watcher 来侦听文件中的更改。当我使用 vim 编辑文件时,文件观察器会检测到更改。但是当我使用 sed 替换文件中的单词时,文件观察器无法识别这些更改。我可以看到修改日期是对的。
watchService = FileSystems.getDefault().newWatchService();
Path parent = file.getParent();
parent.register(watchService,
StandartWatchEventKinds.ENTRY_MODIFY
);
sed 命令看起来像这样:
sed -i 's/a/b/g' file.csv
sed 命令本身有效,文件实际上已更改,修改日期也已更改,但由于某种原因,fire watcher 没有
Java版本-openjdk版本1.8.0_222
更新
所以我已经让它工作了, 一开始我尝试了一个 ansible 脚本,我使用了模块“replace”但它没有说话,因此我尝试使用上面提到的 sed 在本地更改文件,但没有成功。
现在我通过制作一个不同的 ansible 脚本让它工作了,
在新脚本中,我使用cp 命令将所需文件复制到 tmp 文件,然后使用 tmp 文件上的“替换”模块,最后将 tmp 文件复制回所需文件。
我不确定为什么会解决它。
我还发现,在我上面描述的过程中使用 ansible 的“复制”模块并没有帮助,只需使用 shell cp 购买它就会触发文件监视程序。
即使我已经解决了,我想知道您是否知道为什么使用 sed 进行更改时文件观察器不触发
【问题讨论】:
-
文件在什么类型的文件系统上? FileWatcher 不适用于所有类型的文件系统。
-
操作系统是rhel 7.6,文件系统是xfs
-
嗯……那可能不是问题所在。我在想一个本地安装的远程文件系统;例如使用 NFS。
-
您是否在较新的 JDK 上尝试过此测试以查看是否仍然出现?
标签: java file-watcher