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