微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java7 WatchService – 如何检测实际监视目录的重命名/移动

我正在使用 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/
> javadoc – http://jpathwatch.sourceforge.net/

原文地址:https://www.jb51.cc/java/124890.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐