2013-05-06 2 views
1

Я хочу запустить событие всякий раз, когда файл перестает меняться. Я проверяю каталог, и если имя файла соответствует «input.csv», тогда я хочу запустить событие в этом файле. Время проверки того, был ли файл изменен, составляет 10 секунд. Я получаю исключение нулевого указателя, когда не происходит никакого события. Это мой пример кода:Как запустить событие, когда файл не был изменен с помощью Java WatchService?

public class MyPoller { 
public static void main(String[] args) throws URISyntaxException, 
     IOException, InterruptedException { 
    Path tmpPath = Paths.get("E:/MyDirectory/DEC"); 
    WatchService watchService = FileSystems.getDefault().newWatchService(); 
    // Watching the E:/MyDirectory/DEC directory 
    // for MODIFY and DELETE operations 
    tmpPath.register(watcput.csvService, StandardWatchEventKinds.ENTRY_MODIFY, 
      StandardWatchEventKinds.ENTRY_DELETE); 
    for (;;) { 
     WatchKey key = watchService.poll(10000,TimeUnit.MILLISECONDS); 
     List<WatchEvent<?>> events = key.pollEvents(); 

     // Poll all the events queued for the key 
     for (WatchEvent event : events) { 

      switch (event.context().toString()) { 
      case "input.csv": 
       System.out.println("Modified: " + event.context()); 
       String filename = "" + event.context(); 
       System.out.println(" "+filename); 

       break; 

       default: 
        break; 
      } 
     } 
     boolean valid = key.reset(); 

     // If the key is invalid, just exit. 
     if (!valid) { 
      break; 
     } 
    } 

} 
} 

ответ

2

Если событие не генерируется, то WatchKey может быть null

WatchKey key = watchService.poll(10000,TimeUnit.MILLISECONDS); 

Попробуйте сделать null проверку ключа, а затем продолжить делать pollEvents() если это действительно не null.