当前位置: 首页 > 面试题库 >

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

翟黎明
2023-03-14
问题内容

我跟着的变化看目录
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子树功能,这可以绕过此问题,因为它仅创建一个文件句柄。



 类似资料:
  • 我对php和mySQL是完全陌生的,并且正在尝试连接到远程数据库。这是我的代码:- $result=mysql_query(“Select*FROM Constants”); while($ROW=mysql_fetch_array($result)){echo$ROW['name']; echo“ ”;} mysql_close($con); 对这个问题有什么想法吗?马特·蒂亚

  • 我正在使用一个webview加载一个具有视频通话功能的url。当我尝试发起视频通话时。我得到以下错误“权限被拒绝。请刷新页面并允许访问您的相机和麦克风”。 如果我给android CAMERA和Record_Audio的运行时权限。将启动视频呼叫,并将视频传输到计算机。但是在移动端,我不能像查看接收方的视频一样查看我的视频。它只显示getDefaultVideoPoster()。 我已经尝试过使用

  • 问题内容: 为了在具有许多参数的表单中发布AJAX表单,我使用一种解决方案:创建一个,通过POST将表单发布到其中,然后访问的内容。具体来说,我正在访问这样的内容: 我对其进行了测试,并且效果良好。 在某些页面上,我开始出现“访问被拒绝”错误。据我所知,如果iframe是从同一域提供的,则不应发生这种情况。 我很确定它以前可以正常工作。有人知道吗? 如果我不够清楚:我要发布到 同一域 。因此,这不

  • 问题内容: 有没有办法用Java递归删除整个目录? 在正常情况下,可以删除一个空目录。但是,要删除带有目录的整个目录,就不再那么简单了。 如何用Java删除包含目录的整个目录? 问题答案: 你应该查看。它有一个类,可以执行你想要的操作。

  • 问题内容: 运行removeUserFromConference方法时,遇到以下异常: 道方法: 模型类: 问题答案: 您可能已经开始了一笔交易,并尝试开始另一笔交易而没有提交或回滚上一笔交易。使用程序化事务划分时的惯用法如下: 这很麻烦且容易出错,这就是为什么使用EJB或Spring具有声明式事务如此有用的原因之一。

  • 问题内容: 我有一个项目,需要使用JavaScript创建元素并将其附加到DOM。之后,我需要在中插入一些内容。这是一个将嵌入第三方网站的小部件。 我不想设置的“ src”属性,因为我不想加载页面。相反,它用于隔离/沙盒我插入其中的内容,这样我就不会遇到CSS或JavaScript与父页面冲突的情况。我正在使用JSONP从服务器加载一些HTML内容并将其插入此中。 我的工作正常,但有一个严重的例外