2012-05-24 1 views
2

Сколько новогоWatchService я могу сделать?Сколько newWatchService можно создать в Java 7?

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

-> Результат: IOExeption: слишком много открытых файлов ...

+0

Хотя я не пробовал для часов услуг, вы можете получить только так много дескрипторов файлов одновременно. Сколько вы ошибались? Также имейте в виду, что служба просмотра выполняет опрос файловой системы, поэтому в какой-то момент вы даете вашей системе много работы с IO. –

ответ

0

Я думаю, вы должны создать только один наблюдатели услугу, но зарегистрировать [м] любые пути к нему.

В соответствии с примером, представленным документами Oracle (https://docs.oracle.com/javase/tutorial/essential/io/walk.html), в качестве переменной-члена класса WatchDir создается только одна служба часов. Обратите внимание, что «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);