我正在使用Jnotify来编写应用。 (JNotify是用于检测文件修改的库。)
该应用包含以下组件:
写入文件X的文件编写器
监视文件X的文件监视器(使用JNotify创建)
根据用户要求写入文件X的外部应用程序(如记事本)。
我希望JNotify仅在使用3修改X时触发通知,并在通过1修改时忽略。(或至少通过1和3区分修改)。
有一种简单的方法可以做到吗?一种方法是在文件编写器写入时切换一个同步变量,但我觉得这不是很优雅。
答案 0 :(得分:1)
在任何情况下,您需要在1 + 2到临时禁用2之间进行一些通信(对于3,您无法这样做)。如果1 + 2在同一个JVM中运行,当然更合适的方式是在公共变量中共享一些状态。
您可能会想到其他聪明的沟通方式。我想到了一个问题:在1开始写入之前,它将生成一个锁定文件,其中2也是lsten。写入完成后,当锁定文件从1中删除时,2可以在通知的邻接锁定文件删除后继续侦听文件。
答案 1 :(得分:0)
我尝试了两种不同的方式(如下所述,以及我选择的选项)
选项1:使用由1切换为true的共享布尔变量(即锁定)。当此变量为true时,3不写入,而是将其设置为false)。
选项2:使用文件的共享SHA1哈希。 writer(1)每次写入文件时都会更新哈希值。观察者(2)然后检查修改的文件的散列,并忽略散列是否与共享散列匹配。
我决定使用Option 2,因为它工作得很好。使用选项1非常棘手,对于每个修改过的文件,JNotify都会触发两次更新(奇怪)。