我跟着的变化看目录 Java7 NIO2教程递归监视使用代码样本目录中的全部内容WatchDir.java.
虽然这在Linux和Mac上运行良好,在Windows上(在Vista和7上测试),尝试使用Windows资源管理器删除嵌套的,已观看的文件夹失败,并显示类似于"拒绝访问:您需要获得执行此操作的权限"的消息存在于其中一个嵌套目录中.
例如,如果我在Windows中观看嵌套文件夹树:
-- Folder A
-- Folder A1
-- File F
Run Code Online (Sandbox Code Playgroud)
并尝试删除文件夹A,我得到所述拒绝访问错误.但是,如果我:
有没有办法使用nio2 WatchService递归地观察嵌套目录,但不能表现为程序正在访问嵌套文件?
我在这里写的主要是关于从哪里开始的建议.我已经实现了一个类,它将使用Java的WatchService递归地查看目录.它可以很好地检测更改,但我注意到一个致命的缺陷:我无法删除正在监视包含正在监视的目录的目录.这似乎是WatchService的限制.
我也看了一下Apache的VFS FileListener,但是在我花费大约6个小时的时间构建一些包装器之前,我想我可能只会问那些比我自己更有知识的人.
我需要看到的目录是完全可操作的,除了被监视的根目录不会被删除或重命名.是否已经有一个好的类我可以用来监视不锁定文件或文件夹的文件和目录?我试图避免使用轮询/哈希比较方法,但我感觉越来越多,好像我需要使用这种方法并烧掉大量的CPU资源.我从哪里开始呢?理想情况下,我需要:
- 检测文件和目录的创建 - 检测文件和目录的删除 - 检测文件和目录的重命名 - 检测文件的修改 - 检测目录之间文件的移动
我也看到一些人认为观察者不可靠,并且他们使用两者的组合(偶尔在观察者失败的某个地方进行轮询),但男人听起来像是一种真正的痛苦,如果不是,我宁愿避免无论如何最好的方式.我有一种感觉,我需要轮询和散列,特别是因为我想检测文件的移动和重命名,但请告诉我们是否存在更好的选项.
在此先感谢,对不起代码特定的问题感到抱歉!