2013-05-06 49 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