0

我正在使用Jnotify编写应用程序。(JNotify 是一个用于检测文件修改的库。)

该应用程序具有以下组件:

  1. 写入文件 X 的文件写入器

  2. 监视文件 X 的文件监视程序(使用 JNotify 创建)

  3. 根据用户要求写入文件 X 的外部应用程序(例如记事本)。

我希望 JNotify 仅在使用 3 修改 X 时触发通知,并在通过 1 修改时忽略。(或至少区分通过 1 和 3 进行的修改)。

有没有一种简单的方法可以做到这一点?一种方法是有一个同步变量,当文件编写器写入它时切换它,但我觉得这不是很优雅。

4

2 回答 2

1

无论如何,您需要在 1 + 2 之间进行一些通信以暂时禁用 2(至于 3 您没有办法这样做)。如果 1 + 2 在同一个 JVM 中运行,当然更合适的方式是在一个公共变量中共享一些状态。

您可能会想到其他聪明的沟通方式。我想到了一个:在 1 开始写入之前,它会生成一个锁文件,2 也在上面。当锁定文件在写入完成后从 1 中删除时,2 可能会在通知锁定文件删除后继续侦听该文件。

于 2011-03-21T16:33:52.853 回答
0

我尝试了两种不同的方法(如下所述,以及我选择的选项)

  • 选项1:使用一个共享布尔变量(即锁),它被1切换为真。当这个变量为真时,3不写,而是将它设置为假)。

  • 选项 2:使用文件的共享 SHA1 哈希。写入器 (1) 每次写入文件时都会更新哈希值。观察者 (2) 然后检查修改文件的哈希值,如果哈希值与共享哈希值匹配,则忽略该哈希值。

我决定使用选项 2,因为它运行良好。使用选项 1 很棘手,因为对于每个修改过的文件,JNotify 都会触发两次更新(奇怪)。

于 2011-03-22T07:51:32.797 回答