我正在使用WatchService
应用程序工作台同步数据文件。当我重命名/移动监视目录时,我没有收到任何事件,WatchKey 也不会变得无效。我仍然从重命名的目录中获取事件,但据我所知,没有办法找出 WatchKey 的实际路径WatchKey.watchable()
,但仍然返回原始目录路径。我想避免需要锁定监视目录以防止更改,因为我希望使应用程序尽可能轻量级。
我在 Windows 7 上使用 JDK 7u10 遇到了这个问题
您是否知道此问题的任何解决方法,而无需锁定目录或查看所有目录到根目录?
更新
在 Linux 上,我观察到了同样的行为。
到目前为止,我现在似乎有三个选择。
1)依靠用户的纪律,他/她不会移动数据目录。我不太喜欢这个选项,因为它可能会导致未定义的行为。
2)使用更广泛的非标准原生库
3) 在上级目录上创建看门狗的层次结构。这些将仅接受ENTRY_DELETE
事件,因为此事件(或OVERFLOW
)必须在实际监视的目录被移动或删除时出现,因此无效。