我跟着的变化看目录 Java7 NIO2教程递归监视使用代码样本目录中的全部内容WatchDir.java。
尽管此方法在Linux和Mac上运行良好,但在Windows上(在Vista和7上进行了测试),尝试使用Windows资源管理器删除嵌套的监视文件夹失败,并在显示文件时出现类似于“访问被拒绝:您需要执行此操作的权限”的消息存在于其中一个嵌套目录中。
例如,如果我在Windows中观察嵌套的文件夹树:
-- Folder A
-- Folder A1
-- File F
并尝试删除文件夹A,出现提示“拒绝访问”错误。但是,如果我:
有没有一种方法可以使用nio2 WatchService递归地监视嵌套目录,但不能像程序正在访问嵌套文件那样工作?
如果您正在Windows上观看目录,则WatchService实现将打开该目录的句柄(这就是Windows的工作方式)。该打开句柄不会阻止目录被删除,但是会阻止目录的父目录立即被删除。删除监视目录后,该句柄将立即关闭,但是有可能在关闭句柄之前尝试删除该目录。发生这种情况时,您将获得拒绝访问的访问权限。我认为如果您重试它对您来说很好,这是因为在重试时该句柄将关闭。
如果ExtendedWatchEventModifier.FILE_TREE
在register
调用中指定修饰符,则Windows上的Sun JRE可以使用Windows的watch子树功能,这可以绕过此问题,因为它仅创建一个文件句柄。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句