麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Java實現實時監控目錄下文件變化的方法

2024-07-14 08:43:34
字體:
來源:轉載
供稿:網友

一、commons-io方法

1、使用Commons-io的monitor下的相關類可以處理對文件進行監控,它采用的是觀察者模式來實現的

  • (1)可以監控文件夾的創建、刪除和修改
  • (2)可以監控文件的創建、刪除和修改
  • (3)采用的是觀察者模式來實現的
  • (4)采用線程去定時去刷新檢測文件的變化情況

2、引入commons-io包,需要2.0以上。

<!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency>  <groupId>commons-io</groupId>  <artifactId>commons-io</artifactId>  <version>2.6</version></dependency>

3、編寫繼承FileAlterationListenerAdaptor的類FileListener。

import java.io.File;import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;import org.apache.commons.io.monitor.FileAlterationObserver;import org.apache.log4j.Logger;/** * 文件變化監聽器 * 在Apache的Commons-IO中有關于文件的監控功能的代碼. 文件監控的原理如下: * 由文件監控類FileAlterationMonitor中的線程不停的掃描文件觀察器FileAlterationObserver, * 如果有文件的變化,則根據相關的文件比較器,判斷文件時新增,還是刪除,還是更改。(默認為1000毫秒執行一次掃描) */public class FileListener extends FileAlterationListenerAdaptor {  private Logger log = Logger.getLogger(FileListener.class);  /**   * 文件創建執行   */  public void onFileCreate(File file) {    log.info("[新建]:" + file.getAbsolutePath());  }  /**   * 文件創建修改   */  public void onFileChange(File file) {    log.info("[修改]:" + file.getAbsolutePath());  }  /**   * 文件刪除   */  public void onFileDelete(File file) {    log.info("[刪除]:" + file.getAbsolutePath());  }  /**   * 目錄創建   */  public void onDirectoryCreate(File directory) {    log.info("[新建]:" + directory.getAbsolutePath());  }  /**   * 目錄修改   */  public void onDirectoryChange(File directory) {    log.info("[修改]:" + directory.getAbsolutePath());  }  /**   * 目錄刪除   */  public void onDirectoryDelete(File directory) {    log.info("[刪除]:" + directory.getAbsolutePath());  }  public void onStart(FileAlterationObserver observer) {    // TODO Auto-generated method stub    super.onStart(observer);  }  public void onStop(FileAlterationObserver observer) {    // TODO Auto-generated method stub    super.onStop(observer);  }}

4、實現main方法

public static void main(String[] args) throws Exception{    // 監控目錄    String rootDir = "D://apache-tomcat-7.0.78";    // 輪詢間隔 5 秒    long interval = TimeUnit.SECONDS.toMillis(1);    // 創建過濾器    IOFileFilter directories = FileFilterUtils.and(        FileFilterUtils.directoryFileFilter(),        HiddenFileFilter.VISIBLE);    IOFileFilter files    = FileFilterUtils.and(        FileFilterUtils.fileFileFilter(),        FileFilterUtils.suffixFileFilter(".txt"));    IOFileFilter filter = FileFilterUtils.or(directories, files);    // 使用過濾器    FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);    //不使用過濾器    //FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));    observer.addListener(new FileListener());    //創建文件變化監聽器    FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);    // 開始監控    monitor.start();  }

二、使用JDK7提供的WatchService

public static void main(String[] a) {    final Path path = Paths.get("D://apache-tomcat-7.0.78");    try (WatchService watchService = FileSystems.getDefault().newWatchService()) {      //給path路徑加上文件觀察服務      path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,          StandardWatchEventKinds.ENTRY_MODIFY,          StandardWatchEventKinds.ENTRY_DELETE);      while (true) {        final WatchKey key = watchService.take();        for (WatchEvent<?> watchEvent : key.pollEvents()) {          final WatchEvent.Kind<?> kind = watchEvent.kind();          if (kind == StandardWatchEventKinds.OVERFLOW) {            continue;          }          //創建事件          if (kind == StandardWatchEventKinds.ENTRY_CREATE) {            System.out.println("[新建]");          }          //修改事件          if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {            System.out.println("修改]");          }          //刪除事件          if (kind == StandardWatchEventKinds.ENTRY_DELETE) {            System.out.println("[刪除]");          }          // get the filename for the event          final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;          final Path filename = watchEventPath.context();          // print it out          System.out.println(kind + " -> " + filename);        }        boolean valid = key.reset();        if (!valid) {          break;        }      }    } catch (IOException | InterruptedException ex) {      System.err.println(ex);    }  }

三、以上方法都可以實現對相應文件夾得文件監控,但是在使用jdk7提供的API時,會出現些許問題。

  • (1)當文件修改時,會被調用兩次,即輸出兩個相同的修改。
  • (2)不能對其子文件夾進行監控,只能提示目錄被修改。
  • (3)無法對文件類型進行過濾。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人国产在线看 | 天天看成人免费毛片视频 | 成人aaaa免费全部观看 | 久久久久久久亚洲精品 | 久久一级| 精品久久久久久久久久久久 | 成人免费久久网 | av在线久草 | 一区二区三区视频在线播放 | 久久美女免费视频 | 久久精品视频1 | 亚洲成人在线免费 | 欧美色大成网站www永久男同 | 毛片一区二区三区四区 | 国产一级免费av | 国产99一区二区 | 毛片免费视频播放 | 免费特黄 | 国产羞羞网站 | 国产资源在线播放 | 91 成人| 国产精品免费麻豆入口 | 成人在线视频精品 | 看个毛片 | 激情久久一区二区 | 高清国产午夜精品久久久久久 | 国产亚洲精品久久久久5区 男人天堂免费 | 国产一级小视频 | 亚洲成人高清电影 | av免费在线播放网址 | 免费黄色大片网站 | 精品一二三区视频 | 李宗瑞国产福利视频一区 | 91av久久 | 国产成人综合在线视频 | 美女扒开腿让男生桶爽网站 | 亚洲精品一区中文字幕 | 黄色片视频观看 | 午夜视频大全 | 成年人网站国产 | 精品一区二区三区电影 |