Java:nio WatchService - 无法检测第二个文件的创建。为什么?

发布于 2024-12-04 09:21:13 字数 1377 浏览 0 评论 0原文

我正在尝试检测文件夹中的文件创建,但 WatchService 无法检测第二个文件创建。它停留在 key = watcher.take() 处。知道为什么吗?我使用的是 Ubuntu 11.04 x86。

private void watchWorkingDirectory() {
    try {
        WatchService watcher = FileSystems.getDefault().newWatchService();
        WatchKey key;
        key = Paths.get(tailSource, "").register(watcher, ENTRY_CREATE);

        for (;;) {

            System.err.println("Watching current working directory...............................................");
            // wait for key to be signalled
            key = watcher.take();

            System.out.println("Event detected:");


            for (WatchEvent<?> event : key.pollEvents()) {
                WatchEvent.Kind<?> kind = event.kind();

                if (kind == ENTRY_CREATE) {
                    tailSource = event.context().toString();
                    System.out.println(tailSource);
                    File file = new File(tailSource);
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    System.out.println(br.readLine());
                    tailer = new Tailer(file, tListener, 1, false);
                    (new Thread(tailer)).start();
                }
            }
        }

    } catch (IOException | InterruptedException e) {
        System.out.println(e.getMessage());
    }
}

}

i am trying to detect file creation in a folder but WatchService can't detect second file creation. it stucks at key = watcher.take(). Any idea why? I am using Ubuntu 11.04 x86.

private void watchWorkingDirectory() {
    try {
        WatchService watcher = FileSystems.getDefault().newWatchService();
        WatchKey key;
        key = Paths.get(tailSource, "").register(watcher, ENTRY_CREATE);

        for (;;) {

            System.err.println("Watching current working directory...............................................");
            // wait for key to be signalled
            key = watcher.take();

            System.out.println("Event detected:");


            for (WatchEvent<?> event : key.pollEvents()) {
                WatchEvent.Kind<?> kind = event.kind();

                if (kind == ENTRY_CREATE) {
                    tailSource = event.context().toString();
                    System.out.println(tailSource);
                    File file = new File(tailSource);
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    System.out.println(br.readLine());
                    tailer = new Tailer(file, tListener, 1, false);
                    (new Thread(tailer)).start();
                }
            }
        }

    } catch (IOException | InterruptedException e) {
        System.out.println(e.getMessage());
    }
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文