Java7 WatchService-尝试删除递归监视的嵌套目录时出现“拒绝访问”错误(仅Windows)

FR。

我跟着的变化看目录 Java7 NIO2教程递归监视使用代码样本目录中的全部内容WatchDir.java

尽管此方法在Linux和Mac上运行良好,但在Windows上(在Vista和7上进行了测试),尝试使用Windows资源管理器删除嵌套的监视文件夹失败,并在显示文件时出现类似于“访问被拒绝:您需要执行此操作的权限”的消息存在于其中一个嵌套目录中。

例如,如果我在Windows中观察嵌套的文件夹树:

-- Folder A
   -- Folder A1
      -- File F

并尝试删除文件夹A,出现提示“拒绝访问”错误。但是,如果我:

  • 删除文件夹A1,然后删除文件夹A
  • 删除文件F,然后删除文件夹A

有没有一种方法可以使用nio2 WatchService递归地监视嵌套目录,但不能像程序正在访问嵌套文件那样工作?

艾伦:

如果您正在Windows上观看目录,则WatchService实现将打开该目录的句柄(这就是Windows的工作方式)。该打开句柄不会阻止目录被删除,但是会阻止目录的父目录立即被删除。删除监视目录后,该句柄将立即关闭,但是有可能在关闭句柄之前尝试删除该目录。发生这种情况时,您将获得拒绝访问的访问权限。我认为如果您重试它对您来说很好,这是因为在重试时该句柄将关闭。

如果ExtendedWatchEventModifier.FILE_TREEregister调用中指定修饰符,则Windows上的Sun JRE可以使用Windows的watch子树功能,这可以绕过此问题,因为它仅创建一个文件句柄。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从 Java watchservice 注销目录?

MacOS 上 Java 目录 WatchService 的状态

WatchService /删除/文件或目录?

Java NIO WatchService

Java watchservice,如何找到创建文件的目录?

在Java WatchService中实现重命名和删除

如何在等待密钥时停止Java WatchService?

Java 7 WatchService-忽略同一事件的多次出现

Java导入处理声明WatchService

WatchService在许多目录下的性能

WatchService:在注册时传递参数

Java7“ Solr / Lucene”错误的严重程度如何?

Java7 WeakHashMap中的isEmpty()似乎是错误的

Apache Commons IO文件监视与JDK WatchService

适用于Java 6的WatchService

Java:WatchService:File.Lastmodified返回0

Java WatchService 意外停止工作

Java WatchService,使用线程对事件执行操作

WatchService-错误解析的绝对路径

Java7 Diamond运算符转换编译错误

Java7 sqljdbc4-getConnection()上的SQL错误08S01

使用Java7构造模型模拟静态方法时的PowerMock问题

从java7 tomcat7迁移到java8 tomcat8时启动tomcat时出错

我可以使用WatchService监视单个文件的更改(不是整个目录)吗?

将ResultSet放在Java7之后的嵌套try-with-resources语句中是一种好习惯吗?

如何通过使用WatchService停止用于监视文件夹的线程?

WatchService被多次触发(MODIFY被触发,甚至在CREATE完成之前)JAVA

Java WatchService是每个JVM还是一个应用程序可以启动多个?

WatchService是在有任何的API建立超时如果不是在事件发生目录