2

複数のフォルダ パスを 1 つのウォッチ サービスに登録する方法を教えてもらえますか? 複数のフォルダーに対して 1 つの WatchService と、どちらが優れていますか (速度)? または1つのフォルダーパスに対して1つのWatchServiceですか?複数のフォルダは最大 12 個です。

4

1 に答える 1

0

Java チュートリアル ( http://docs.oracle.com/javase/tutorial/essential/io/notification.html ) から:

監視サービスを実装するために必要な基本的な手順は次のとおりです。

  • ファイル システムの WatchService「ウォッチャー」を作成します。
  • 監視するディレクトリごとに、ウォッチャーに登録します。ディレクトリを登録するときに、通知するイベントの種類を指定します。登録するディレクトリごとに WatchKey インスタンスを受け取ります。
  • 着信イベントを待機する無限ループを実装します。イベントが発生すると、キーが通知され、ウォッチャーのキューに配置されます。
  • ウォッチャーのキューからキーを取得します。キーからファイル名を取得できます。
  • キーの保留中の各イベント (複数のイベントがある場合があります) を取得し、必要に応じて処理します。
  • キーをリセットし、イベントの待機を再開します。
  • サービスを閉じる: スレッドが終了するか、(closed メソッドを呼び出すことによって) スレッドが閉じられると、watch サービスは終了します。

12 個のフォルダーがある場合、おそらく WatchKey ごとに 1 つのスレッドを作成します。

  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 に答える