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

前端之家收集整理的这篇文章主要介绍了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/

猜你在找的Java相关文章