2013-02-11 58 views

回答

4

如果你使用的Java 7,您可以使用WatchService API監視更改文件系統。

如果您遇到了Java 6-,您可以查看this postthis other one中提出的一些替代方案。

+0

我們有一個限制,只使用Java的6能否請您提出任何框架是用java 6,和開源兼容? – Mithun 2013-02-11 10:51:17

+0

@Mithun我已經添加了兩個與java 6兼容庫的鏈接。 – assylias 2013-02-11 10:54:53

2

你看過Java 7的File Notifier service

java.nio.file包提供文件更改通知API ,稱爲Watch Service API。該API使您能夠在監視服務中註冊 目錄(或多個目錄)。在註冊時,您可以告訴服務您感興趣的事件類型:文件 創建,文件刪除或文件修改。當服務 檢測到感興趣的事件時,它將被轉發到註冊的 進程。註冊過程有一個線程(或線程池) 致力於監視它已註冊的任何事件。當事件進入時,會根據需要進行處理。

JNotify是一個類似的服務/庫爲那些誰也無法使用Java 7

1

Java 7引入了WatchService,它監視註冊對象的變化和事件。

示例 -

Path myDir = Paths.get("D:/test");  

    try { 
     WatchService watcher = myDir.getFileSystem().newWatchService(); 
     myDir.register(watcher, StandardWatchEventKind.ENTRY_CREATE, 
     StandardWatchEventKind.ENTRY_DELETE, StandardWatchEventKind.ENTRY_MODIFY); 

     WatchKey watckKey = watcher.take(); 

     List<WatchEvent<?>> events = watckKey.pollEvents(); 
     for (WatchEvent event : events) { 
      if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) { 
       System.out.println("Created: " + event.context().toString()); 
      } 
      if (event.kind() == StandardWatchEventKind.ENTRY_DELETE) { 
       System.out.println("Delete: " + event.context().toString()); 
      } 
      if (event.kind() == StandardWatchEventKind.ENTRY_MODIFY) { 
       System.out.println("Modify: " + event.context().toString()); 
      } 
     } 

    } catch (Exception e) { 
     System.out.println("Error: " + e.toString()); 
    } 
}