如果我开始关注文件夹A
中的更改,请删除并重新创建它,然后WatchService不会触发此文件夹的任何事件。在WatchService忘记文件夹之后我想重新打包文件夹A
。
如何检查WatchService是否仍跟踪文件夹A
?
答案 0 :(得分:3)
无需监控父文件夹,有一种方法可以知道您不再使用的观察者是否可以重新创建它。
以下代码可以帮助您。
WatchService watchService = null;
String folderString = "Your path here";
do
{
Thread.sleep(1000);
File dir = new File(folderString);
if (!dir.exists())
continue;
watchService = FileSystems.getDefault().newWatchService();
Path folder = Paths.get(folderString);
folder.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
boolean watchStillOperational = false;
do
{
WatchKey watchKey = watchService.take();
for (WatchEvent<?> event : watchKey.pollEvents())
{
.....
}
// The following line indicates if the watch no longer works
// If the folder was deleted this will return false.
watchStillOperational = watchKey.reset();
} while (watchStillOperational)
} while(true)
答案 1 :(得分:0)
您的问题是您删除了监视文件夹,然后创建了一个具有相同名称的新文件夹,从WatchService
的角度来看是一个不同的文件夹。观看的文件夹可能仍在垃圾箱/回收站中观看。
如果您希望能够从中恢复,最简单的方法是观看超级目录。您可能也有运气定期检查文件夹的路径,如果删除它将更改。
我觉得这个问题是计划不好的症状。你不能只是保护文件夹(或超级文件夹)不容易删除。