java - 如何检查 WatchService 跟踪的文件夹?

标签 java nio watchservice

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

如何检查文件夹 A 是否仍被 WatchService 跟踪?

最佳答案

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

下面的代码应该可以帮到你。

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)

关于java - 如何检查 WatchService 跟踪的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17981549/

相关文章:

java - 通过按钮调用时不显示用户输入。使用 Java 数组列表

java - 使用 IntelliJ IDEA 调试时如何解析 JSP 中的 Spring 模型变量?

java - IO和NIO性能区别及例子

java - 使用 Java WatchService 监视文件夹中的文件夹

java - Apache Commons IO 文件监控与 JDK WatchService

java - 等待 RESTful Web 服务中的数据下载

java - Gmail Api 请求的身份验证范围不足

写入 channel 后,Java Selector 在无限循环中返回带有 OP_READ 的 SelectionKey,没有数据

Java NIO : Why the method names "read" "write" sounds the opposite?

Java I/O : Ensure a file is not locked by another process before any r/w operation