2

有人可以指导我如何使用一个监视服务注册多个文件夹路径吗?哪个更好(速度),一个 WatchService 用于多个文件夹?还是一个 WatchService 用于一个文件夹路径?多个文件夹最多可以有 12 个!

4

1 回答 1

0

从 Java 教程(http://docs.oracle.com/javase/tutorial/essential/io/notification.html):

以下是实现监视服务所需的基本步骤:

  • 为文件系统创建一个 WatchService“观察者”。
  • 对于要监视的每个目录,将其注册到观察程序。注册目录时,您指定要通知的事件类型。您注册的每个目录都会收到一个 WatchKey 实例。
  • 实现一个无限循环来等待传入事件。当一个事件发生时,该键被发送信号并被放入观察者的队列中。
  • 从观察者的队列中检索密钥。您可以从密钥中获取文件名。
  • 检索密钥的每个待处理事件(可能有多个事件)并根据需要进行处理。
  • 重置密钥,并继续等待事件。
  • 关闭服务:当线程退出或关闭(通过调用其关闭方法)时,监视服务退出。

如果有 12 个文件夹,我可能会为每个 WatchKey 创建一个线程。

  WatchService watcher = FileSystems.getDefault().newWatchService();

  // Repeat the following code to get a WatchKey for each folder
  try {
    Path dir = FileSystems.getDefault().getPath("logs", "access.log");
    WatchKey key = dir.register(watcher,
                           ENTRY_CREATE,
                           ENTRY_DELETE,
                           ENTRY_MODIFY);
  } 
  catch (IOException x) {
    System.err.println(x);
  }
于 2013-09-17T10:44:53.733 回答