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