如果我开始监视文件夹A中的更改,请删除并重新创建它,然后WatchService将不会触发此文件夹的任何事件。我想在WatchService忘记文件夹A后重新查看它。

如何检查WatchService仍跟踪文件夹A

最佳答案

无需监视父文件夹,有一种方法可以知道您不再拥有的监视程序是否可用,因此您可以重新创建它。

以下代码将为您提供帮助。

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)

10-04 15:11