Java檔案即時監控Commons-io

來源:互聯網
上載者:User

標籤:

今天看到一網友寫的 Java 檔案監控,即時監控檔案載入 ,突然想到Commons-io中已有此功能的實現,先溫習下 寫個簡單的Demo:

有三種方式:1、java common.io    內部實現是遍曆的方式,小檔案夾的效率還好,比如我測試60G的目錄,就很慢很慢了。(我使用這個)2、jdk 7 的watch service    //經測試基本不可用。在一個40g的很深的目錄下去建立和刪除檔案5分鐘都沒結果。主要原因是需要對每一個Path進行註冊監控。3、jnotify                   直接調用windows的api,效率很高,也很簡單,推薦使用。common.io需要java.io 2.1及其以上版本。版本地址如下:http://commons.apache.org/io/download_io.cgiJava代碼  
  1. package wy.util.filemonitor;  
  2.   
  3. import java.io.File;  
  4.   
  5. import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;  
  6. import org.apache.commons.io.monitor.FileAlterationObserver;  
  7. import org.apache.log4j.Logger;  
  8.   
  9. /** 
  10.  * 檔案變化監聽器 
  11.  *  
  12.  * 在Apache的Commons-IO中有關於檔案的監控功能的代碼. 檔案監控的原理如下: 
  13.  * 由檔案監控類FileAlterationMonitor中的線程不停的掃描檔案觀察器FileAlterationObserver, 
  14.  * 如果有檔案的變化,則根據相關的檔案比較子,判斷檔案時新增,還是刪除,還是更改。(預設為1000毫秒執行一次掃描) 
  15.  *  
  16.  * @author wy 
  17.  *  
  18.  */  
  19. public class FileListener extends FileAlterationListenerAdaptor {  
  20.     private Logger log = Logger.getLogger(FileListener.class);  
  21.   
  22.     /** 
  23.      * 檔案建立執行 
  24.      */  
  25.     @Override  
  26.     public void onFileCreate(File file) {  
  27.         log.info("[建立]:" + file.getAbsolutePath());  
  28.     }  
  29.   
  30.     /** 
  31.      * 檔案建立修改 
  32.      */  
  33.     @Override  
  34.     public void onFileChange(File file) {  
  35.         log.info("[修改]:" + file.getAbsolutePath());  
  36.     }  
  37.   
  38.     /** 
  39.      * 檔案刪除 
  40.      */  
  41.     @Override  
  42.     public void onFileDelete(File file) {  
  43.         log.info("[刪除]:" + file.getAbsolutePath());  
  44.     }  
  45.   
  46.     /** 
  47.      * 目錄建立 
  48.      */  
  49.     @Override  
  50.     public void onDirectoryCreate(File directory) {  
  51.         log.info("[建立]:" + directory.getAbsolutePath());  
  52.     }  
  53.   
  54.     /** 
  55.      * 目錄修改 
  56.      */  
  57.     @Override  
  58.     public void onDirectoryChange(File directory) {  
  59.         log.info("[修改]:" + directory.getAbsolutePath());  
  60.     }  
  61.   
  62.     /** 
  63.      * 目錄刪除 
  64.      */  
  65.     @Override  
  66.     public void onDirectoryDelete(File directory) {  
  67.         log.info("[刪除]:" + directory.getAbsolutePath());  
  68.     }  
  69.   
  70.     @Override  
  71.     public void onStart(FileAlterationObserver observer) {  
  72.         // TODO Auto-generated method stub  
  73.         super.onStart(observer);  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onStop(FileAlterationObserver observer) {  
  78.         // TODO Auto-generated method stub  
  79.         super.onStop(observer);  
  80.     }  
  81.   
  82. }  
Java代碼  
  1. package wy.util.filemonitor;  
  2.   
  3. import java.util.concurrent.TimeUnit;  
  4.   
  5. import org.apache.commons.io.filefilter.FileFilterUtils;  
  6. import org.apache.commons.io.monitor.FileAlterationMonitor;  
  7. import org.apache.commons.io.monitor.FileAlterationObserver;  
  8.   
  9. /** 
  10.  * 檔案監控測試 
  11.  *  
  12.  * 在Apache的Commons-IO中有關於檔案的監控功能的代碼. 檔案監控的原理如下: 
  13.  * 由檔案監控類FileAlterationMonitor中的線程不停的掃描檔案觀察器FileAlterationObserver, 
  14.  * 如果有檔案的變化,則根據相關的檔案比較子,判斷檔案時新增,還是刪除,還是更改。(預設為1000毫秒執行一次掃描) 
  15.  *  
  16.  * @author wy 
  17.  * 
  18.  */  
  19. public class FileMonitorTest {  
  20.   
  21.     /** 
  22.      * @param args 
  23.      */  
  24.     public static void main(String[] args) throws Exception{  
  25.         // 監控目錄    
  26.         String rootDir = "F:\\Resume";    
  27.         // 輪詢間隔 5 秒    
  28.         long interval = TimeUnit.SECONDS.toMillis(5);  
  29.         // 建立一個檔案觀察器用於處理檔案的格式    
  30.         FileAlterationObserver _observer = new FileAlterationObserver(    
  31.                                               rootDir,     
  32.                                               FileFilterUtils.and(    
  33.                                                FileFilterUtils.fileFileFilter(),    
  34.                                                FileFilterUtils.suffixFileFilter(".txt")),  //過濾檔案格式    
  35.                                               null);    
  36.         FileAlterationObserver observer = new FileAlterationObserver(rootDir);  
  37.           
  38.         observer.addListener(new FileListener()); //設定檔案變化監聽器    
  39.         //建立檔案變化監聽器    
  40.         FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);    
  41.         // 開始監控    
  42.         monitor.start();    
  43.     }  
  44.   
  45. }  

 

看下結果:


 

==============================================================================

 

那位網友的文章:http://www.iteye.com/topic/1127281

 

還有位網友的文章:http://dyccsxg.iteye.com/blog/618993

 

兩位的思路都很相似,基本上是採用線程輪詢的方式,但在校正檔案更新的時候一位採用的檔案校正碼及hash碼,另一位是採用檔案的最後修改時間(lastModified()).

 

Java檔案即時監控Commons-io

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.