java – WatchService(Windows 7):删除文件时,它会触发ENTRY_MODIFY和ENTRY_DELETE事件吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – WatchService(Windows 7):删除文件时,它会触发ENTRY_MODIFY和ENTRY_DELETE事件吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1237字,纯文字阅读大概需要2分钟。
内容图文
![java – WatchService(Windows 7):删除文件时,它会触发ENTRY_MODIFY和ENTRY_DELETE事件吗?](/upload/InfoBanner/zyjiaocheng/964/733339b095784e9885e8ec251db182ee.jpg)
在使用WatchService时,我发现如果删除正在监视的目录中的文件,它会触发ENTRY_MODIFY,然后触发ENTRY_DELETE事件.
我从技术上认识到,文件可能会在删除之前被修改,但实际上删除文件的预期行为是否会触发ENTRY_MODIFY(可能没有人关心)?
为了解决这个问题,我必须在触发传递ENTRY_MODIFY事件之前添加一个要检查的条件:
if (eventKind == ENTRY_CREATE) {
listener.fileCreated(file);
} else if (eventKind == ENTRY_MODIFY) {
if (Files.exists(fullPath, LinkOption.NOFOLLOW_LINKS)) {
listener.fileChanged(file);
}
} else if (eventKind == ENTRY_DELETE) {
listener.fileDeleted(file);
}
这有更好的方法来处理这个问题(功能)吗?
解决方法:
我只能确认这个问题.根据评论和我自己的观察,ENTRY_MODIFY事件在文件被删除之前触发,您必须处理它.
假设我们有两个线程.一个是在做Files.delete(),另一个是在看目录并试图读取修改过的文件.可能发生以下任何一种情况:
>在监视线程拾取事件之前,Files.delete()只是设法修改和删除文件.然后在ENTRY_MODIFY工作之后检查文件是否存在的技术.
> Files.delete()调用可能失败(返回false),因为该文件已被观察线程打开.
唯一的解决方案似乎是忽略监视线程中的所有IOExceptions并重试几次Files.delete()调用.
我只是尝试使用Files.delete()从同一个JVM中删除文件.我没有尝试从系统上的其他进程中删除.使用NTFS在Windows 7~10上重现问题,可能不在其他操作系统上.
我鼓励其他人编辑这个答案并添加他们的观察结果.
内容总结
以上是互联网集市为您收集整理的java – WatchService(Windows 7):删除文件时,它会触发ENTRY_MODIFY和ENTRY_DELETE事件吗?全部内容,希望文章能够帮你解决java – WatchService(Windows 7):删除文件时,它会触发ENTRY_MODIFY和ENTRY_DELETE事件吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。