2

newWatchService はいくつ作成できますか?

try{
    for(Path path : PathList) {
        watcher = path.getFileSystem().newWatchService();
    } catch (IOException e) {
        log.error(e);
    }
}

--> 結果: IOExeption: 開いているファイルが多すぎます...

4

1 に答える 1

0

ウォッチャー サービスは 1 つだけ作成することになっていると思いますが、そのサービスへの任意のパスを登録します。

Oracle ドキュメント ( https://docs.oracle.com/javase/tutorial/essential/io/walk.html ) で示されている例によると、WatchDir クラスのメンバー変数として作成されるウォッチ サービスは 1 つだけです。「this.watcher」に注意してください

public class WatchDir {

    private final WatchService watcher;

クラスの別の場所で...

 /**
 * Creates a WatchService and registers the given directory
  */
WatchDir(Path dir, boolean recursive) throws IOException {
    this.watcher = FileSystems.getDefault().newWatchService();

同じサービスを使用して、特定のフォルダー内のすべてのパスを再帰的に登録します。

最後に、登録はここで行われます...

/**
 * Register the given directory with the WatchService
 */
private void register(Path dir) throws IOException {
    WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
于 2015-07-20T18:17:45.023 に答える