加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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/
> javadoc – http://jpathwatch.sourceforge.net/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读