gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:25 25 4
gpt4 key购买 nike

我正在使用 WatchService用于与应用程序工作台同步数据文件。当我重命名/移动监视目录时,我没有收到任何事件,WatchKey 也不会变得无效。我仍然从重命名的目录中获取事件,但据我所知,除了 WatchKey.watchable() 之外,没有办法找出 WatchKey 的实际路径。然而,它仍然返回原始目录路径。我想避免锁定监视目录以防止更改,因为我想使应用程序尽可能轻量级。

我在 Windows 7 上使用 JDK 7u10 时遇到过这个问题

您是否知道在不锁定目录或查看所有目录到根目录的情况下解决此问题的任何解决方法?

更新

在 Linux 上我观察到了相同的行为。

到目前为止,我现在似乎有三个选择。

1) 依靠用户的纪律,他/她不会移动数据目录。我不太喜欢这个选项,因为它可能会导致未定义的行为。

2) 使用更广泛的非标准原生库

3) 在上级目录上创建看门狗层次结构。这些将只接受 ENTRY_DELETE 事件,因为此事件(或 OVERFLOW)必须出现在实际监视的目录被移动或删除的时刻,因此无效。

最佳答案

我的理解是重命名目录会在旧的和新的父目录上产生文件系统事件,而不是在重命名的目录上。根据Can iNotify tell me where a monitored file is moved?的回答,除非您正在监视目标目录,否则操作系统无法告诉您某些内容被移动到了哪里。 (此外,在 Java 7/8 中,MOVE 事件不由 watch 服务实现处理。)

更新

您可以尝试使用标准 Java7 WatchService API 添加对 ( platform specific) 扩展事件支持的 jpathwatch 项目。

引用资料:

关于Java7 WatchService - 如何检测实际监视目录的重命名/移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com