Java7 WatchService – 如何检测实际监视目录的重命名/移动
发布时间:2020-12-14 16:34:38 所属栏目:Java 来源:网络整理
导读:我正在使用 WatchService 与应用程序工作台的同步数据文件.当我重命名/移动被监视的目录时,我没有收到任何事件,也不会使WatchKey无效.我仍然从重命名的目录中获取事件,但据我所知,除了 WatchKey.watchable() 之外,还没有找到WatchKey的实际路径,但是仍然返回
我正在使用
WatchService 与应用程序工作台的同步数据文件.当我重命名/移动被监视的目录时,我没有收到任何事件,也不会使WatchKey无效.我仍然从重命名的目录中获取事件,但据我所知,除了
WatchKey.watchable() 之外,还没有找到WatchKey的实际路径,但是仍然返回原始目录路径.我想避免将观察目录锁定在更改之上,因为我希望保持应用程序尽可能轻松.
我在Windows 7上遇到了JDK 7u10的这个问题 您是否知道有关此问题的任何解决方法,而不锁定目录或将所有目录看到根目录? UPDATE 在Linux上我观察到同样的行为. 到目前为止,我现在有三个选择. 1)依靠用户的纪律,他/她不会移动数据目录.我不太喜欢这个选项,因为它可能会导致未定义的行为. 2)使用更广泛的非标本地库 3)在上级目录上创建看门狗的层次结构.这些只会接受ENTRY_DELETE事件,因为此事件(或OVERFLOW)必须在实际监视的目录被移动或删除,因此无效时出现. 解决方法
我的理解是,重命名目录将在旧的和新的父目录上生成文件系统事件,而不是重命名的目录.根据
Can iNotify tell me where a monitored file is moved?的答案,操作系统无法告诉您移动到何处,除非您正在监视目标目录. (此外,在Java 7/8 MOVE事件不由手表服务实现处理.)
UPDATE 您可以尝试使用标准Java7 WatchService API添加对(platform specific)扩展事件的支持的jpathwatch项目. 参考文献: >文档 – http://jpathwatch.wordpress.com/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |