欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)

 更新時(shí)間:2016年08月22日 09:58:23   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一. spring配置文件:application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
  xmlns:jaxrs="http://cxf.apache.org/jaxrs"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
  
  <!-- 文件監(jiān)測(cè)器 -->  
  <bean id="monitor"
    class="com.interfaces.file.monitor.FileMonitorImpl">
  
    <constructor-arg index="0" value="10000" />          <!-- 監(jiān)測(cè)時(shí)間間隔,單位:毫秒 -->
    <constructor-arg index="1" ref="observer" />        <!-- 文件觀察器 -->
  </bean>    
  
  <!-- 文件觀察器 -->    
  <bean id="observer"
    class="com.interfaces.file.monitor.FileObserverImpl">
    
    <constructor-arg index="0" value="D:\\UploadDir"/>      <!-- 觀察的目錄 -->
    <constructor-arg index="1" ref="filter"/>          <!-- 文件過(guò)濾器-->
    <constructor-arg index="2" ref="listener"/>          <!-- 文件監(jiān)聽(tīng)器 -->
  </bean>
  
  <!-- 文件監(jiān)聽(tīng)器 -->  
  <bean id="listener"
    class="com.interfaces.file.monitor.FileListener"/>
  
  <!-- 文件過(guò)濾器 -->    
  <bean id="filter"
    class="com.interfaces.file.monitor.FileFilterImpl">    
    <!-- 
      指定文件擴(kuò)展名,只有指定的擴(kuò)展名文件會(huì)被處理。
      不同的擴(kuò)展名間以 "," 間隔,如:xml,txt,bak 
    -->
    <constructor-arg index="0" value="xml"/>    
  </bean>
</beans>

二. spring上下文加載監(jiān)聽(tīng)器:SpringContextLoaderListener.class

import javax.servlet.ServletContextEvent;

import org.springframework.web.context.ContextLoaderListener;

public class SpringContextLoaderListener extends ContextLoaderListener{
  
  @Override
  public void contextInitialized(ServletContextEvent event) {
    super.contextInitialized(event);
    
    FileMonitor scanner = getScanner();
    
    // 啟動(dòng)目錄掃描器
    scanner.start();
  }
  
  @Override
  public void contextDestroyed(ServletContextEvent event) {
    FileMonitor scanner = getScanner();
    
    // 關(guān)閉目錄掃描器
    scanner.stop();
    
    super.contextDestroyed(event);
  }
  
  /**
   * 獲取目錄掃描器
   * @return
   */
  private FileMonitor getScanner() {
    return getCurrentWebApplicationContext().getBean(FileMonitor.class);
  }
}

三. web工程配置文件:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.4">
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
      classpath:application.xml
  </param-value>
 </context-param>
 <listener>
   <listener-class>com.web.SpringContextLoaderListener</listener-class>
 </listener>
  
</web-app>

四. 文件監(jiān)測(cè)器

1. 接口:FileMonitor.class

import org.apache.commons.io.monitor.FileAlterationObserver;

/**
 * 文件監(jiān)測(cè)器角色
 */
public interface FileMonitor {

  /**
   * 注冊(cè)觀察器
   * @param observer  觀察器
   */
  void addObserver(FileAlterationObserver observer);
    
  /**
   * 刪除觀察器
   * @param observer  觀察器
   */
  void removeObserver(FileAlterationObserver observer);  
  
  /**
   * 獲取注冊(cè)的所有觀察器
   * @return  觀察器集合
   */
  Iterable<FileAlterationObserver> getObservers();  
  
  /**
   * 啟動(dòng)監(jiān)測(cè)器
   */
  void start();  
  
  /**
   * 停止監(jiān)測(cè)器
   */
  void stop();  
  
  /**
   * 獲取監(jiān)測(cè)間隔時(shí)間
   * @return  間隔時(shí)間(單位:毫秒)
   */
  long getInterval();  
  
}

2. 實(shí)現(xiàn)類:FileMonitorImpl.class

import java.util.concurrent.ThreadFactory;

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;

/**
 * 監(jiān)測(cè)器,監(jiān)測(cè)時(shí)間間隔,設(shè)置文件觀察器
 */
public class FileMonitorImpl implements FileMonitor{

  private final FileAlterationMonitor monitor;
  
  /**
   * 監(jiān)測(cè)器線程名稱
   */
  private static final String MONITOR_THREAD_NAME = "File MONITOR Daemon";
    
  /**
   * 監(jiān)測(cè)器線程Daemon標(biāo)記
   */
  private static final boolean DAEMON = false;
  
  
  /**
   * 定義監(jiān)測(cè)時(shí)間間隔、文件觀察器
   * @param interval  監(jiān)測(cè)時(shí)間間隔
   * @param observer  文件觀察者
   */
  FileMonitorImpl(int interval, final FileAlterationObserver observer) {
    this(interval, observer, 
      new BasicThreadFactory.Builder().
          namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build());    
  }  
  
  /**
   * 定義監(jiān)測(cè)時(shí)間間隔、文件觀察器和線程工廠
   * @param interval  監(jiān)測(cè)時(shí)間間隔
   * @param observer  文件觀察器
   * @param factory  線程工廠
   */
  FileMonitorImpl(int interval, final FileAlterationObserver observer, 
              final ThreadFactory factory) {    
    this.monitor = new FileAlterationMonitor(interval, new FileAlterationObserver[] { observer });
    monitor.setThreadFactory(factory);    
  } 
  
  /**
   * 添加文件觀察器
   * @param observer
   */
  @Override
  public void addObserver(FileAlterationObserver observer) {
    monitor.addObserver(observer);
  }

  /**
   * 刪除文件觀察器 
   * @param observer
   */
  @Override
  public void removeObserver(FileAlterationObserver observer) {
    monitor.removeObserver(observer);
  }

  /**
   * 獲取注冊(cè)的所有觀察器
   * @return
   */
  @Override
  public Iterable<FileAlterationObserver> getObservers() {
    return monitor.getObservers();
  }

  /**
   * 啟動(dòng)監(jiān)測(cè)器
   */
  @Override
  public void start() {
    try {
      monitor.start();
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 停止監(jiān)測(cè)器
   */
  @Override
  public void stop() {
    try {
      monitor.stop();
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 獲取監(jiān)測(cè)時(shí)間間隔
   */
  @Override
  public long getInterval() {
    return monitor.getInterval(); 
  }

}

五. 文件觀察器

1. 接口:FileObserver.class

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListener;

/**
 * 文件觀察器角色
 */
public interface FileObserver {
  
  /**
   * 添加監(jiān)聽(tīng)器
   * @param listener
   */
  void addListener(final FileAlterationListener listener);
    
  /**
   * 刪除監(jiān)聽(tīng)器
   * @param listener
   */
  void removeListener(final FileAlterationListener listener);
    
  /**
   * 獲取注冊(cè)的監(jiān)聽(tīng)器
   * @return
   */
  Iterable<FileAlterationListener> getListeners();  
  
  /**
   * 初始化觀察器
   * @throws Exception
   */
  void initialize() throws Exception;  
  
  /**
   * 銷毀觀察器
   * @throws Exception
   */
  void destroy() throws Exception;  
  
  /**
   * 獲取觀察的目錄
   * @return
   */
  File getDirectory();
  
  /**
   * 獲取文件過(guò)濾器
   * 
   * @return
   */
  public FileFilter getFilter();
}

2. 實(shí)現(xiàn)類:FileObserverImpl.class

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**
 * 文件觀察器
 * 
 * 當(dāng)有文件創(chuàng)建、刪除、或變更動(dòng)作時(shí),則消息通知監(jiān)聽(tīng)器
 */
public class FileObserverImpl extends FileAlterationObserver implements FileObserver{
  
  private static final long serialVersionUID = -7239227289538993830L;
  
  /**
   * 文件過(guò)濾器
   */
  private final FileFilter filter;
    
  /**
   * 設(shè)置要監(jiān)聽(tīng)觀察的目錄,并設(shè)置文件過(guò)濾器和監(jiān)聽(tīng)器,用以觀察指定具有指定擴(kuò)展名的文件
   * @param dir      觀察監(jiān)聽(tīng)的目錄
   * @param filter    文件過(guò)濾器
   * @param listener    文件監(jiān)聽(tīng)器
   */
  public FileObserverImpl(String dir, final FileFilter filter, 
                  FileAlterationListener listener) {
    super(dir, filter, (IOCase) null);
    addListener(listener); 
    
    this.filter = filter;
    
    File directory = new File(dir);
    
    // 如果目錄不存在
    if(!directory.exists()) {
      try {
        FileUtils.forceMkdir(directory);
      } 
      catch (IOException e) {
        e.printStackTrace();
      }
    }
    // 如果存在的是文件
    else if(directory.exists() && directory.isFile()) {
      try {
        FileUtils.forceDelete(directory);
        FileUtils.forceMkdir(directory);
      } 
      catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  
  /**
   * 添加監(jiān)聽(tīng)器
   */
  @Override
  public void addListener(final FileAlterationListener listener) {
    super.addListener(listener);
  }

  /**
   * 移除監(jiān)聽(tīng)器
   */
  @Override
  public void removeListener(final FileAlterationListener listener) {
    super.removeListener(listener);
  }

  /**
   * 獲取觀察者對(duì)象的所有監(jiān)聽(tīng)器
   */
  @Override
  public Iterable<FileAlterationListener> getListeners() {
    return super.getListeners();
  }
  
  /**
   * 初始化文件觀察者
   */
  @Override
  public void initialize() throws Exception {
    super.initialize();
  }

  /**
   * 銷毀文件觀察者
   */
  @Override
  public void destroy() throws Exception {
    super.destroy();
  }
  
  /**
   * 獲取所觀察的目錄
   */
  @Override
  public File getDirectory() {
    return super.getDirectory();
  }

  /**
   * 獲取文件過(guò)濾器
   * @return
   */
  public FileFilter getFilter() {
    return filter;
  }  
}

六. 文件監(jiān)聽(tīng)器:FileListener.class

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**
 * 文件監(jiān)聽(tīng)器
 */
public final class FileListener extends FileAlterationListenerAdaptor {
  
  /**
   * 文件創(chuàng)建時(shí)執(zhí)行的動(dòng)作
   */
  @Override
  public void onFileCreate(File file) {
    // To do something
  }
  
  /**
   * 文件刪除(轉(zhuǎn)移)時(shí)執(zhí)行的動(dòng)作
   */
  @Override
  public void onFileDelete(File file) {
    // To do something
  }
  
  /**
   * 文件內(nèi)容改變時(shí)執(zhí)行的動(dòng)作
   */
  @Override
  public void onFileChange(File file) {
    // To do something
  }
  
  /**
   * 開(kāi)始執(zhí)行監(jiān)聽(tīng)時(shí)執(zhí)行的動(dòng)作
   */
  @Override
  public void onStart(FileAlterationObserver observer) {
    // To do something
  }
  
  /**
   * 停止監(jiān)聽(tīng)時(shí)執(zhí)行的動(dòng)作
   */
  @Override
  public void onStop(FileAlterationObserver observer) {
    // To do something
  }
}

七. 文件過(guò)濾器

1. 接口:FileFilter.class

/**
 * 文件過(guò)濾器角色,擴(kuò)展自java.io.FileFilter
 */
public interface FileFilter extends java.io.FileFilter {
  
  /**
   * 獲取定義的擴(kuò)展名
   * 
   * @return
   */
  String[] getExtensions();
}

2. 實(shí)現(xiàn)類:FileFilterImpl.class

import java.io.File;

import org.apache.commons.io.FilenameUtils;

/**
 * 文件過(guò)濾器
 */
public class FileFilterImpl implements FileFilter{
  
  private String[] extensions;
  
  public FileFilterImpl(String... extensions) {
    this.extensions = extensions;
  }
  
  /**
   * 是否接受該文件
   */
  @Override
  public boolean accept(File pathname) {
    return FilenameUtils.isExtension(pathname.getName(), extensions); 
  }

  /**
   * 獲取定義的擴(kuò)展名
   * @return 
   */
  @Override
  public String[] getExtensions() {
    return extensions;
  }

}

以上這篇java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解maven的setting配置文件中mirror和repository的區(qū)別

    詳解maven的setting配置文件中mirror和repository的區(qū)別

    這篇文章主要介紹了詳解maven的setting配置文件中mirror和repository的區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    這篇文章主要介紹了Spring Cloud Gateway 修改HTTP響應(yīng)信息的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中Arrays類與Math類詳解

    Java中Arrays類與Math類詳解

    這篇文章主要介紹了Java中Arrays類與Math類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java 中ThreadLocal本地線程和同步機(jī)制的比較

    java 中ThreadLocal本地線程和同步機(jī)制的比較

    這篇文章主要介紹了java 中ThreadLocal本地線程和同步機(jī)制的比較的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Elasticsearch配置文件選項(xiàng)作用詳解(es7)

    Elasticsearch配置文件選項(xiàng)作用詳解(es7)

    這篇文章主要為大家介紹了Elasticsearch配置文件選項(xiàng)作用詳解(es7),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java中枚舉的實(shí)現(xiàn)原理介紹

    Java中枚舉的實(shí)現(xiàn)原理介紹

    大家好,本篇文章主要講的是Java中枚舉的實(shí)現(xiàn)原理介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Spring基礎(chǔ)之AOP的概念介紹

    Spring基礎(chǔ)之AOP的概念介紹

    AOP是Spring的關(guān)鍵特性之一,雖然Spring的IOC特性并不依賴于AOP,本文重點(diǎn)介紹AOP編程中的一些術(shù)語(yǔ),這些術(shù)語(yǔ)不僅僅局限于Spring,它適用于所有的AOP編程,感興趣的朋友一起看看吧
    2022-06-06
  • 手把手帶你理解java線程池之工作隊(duì)列workQueue

    手把手帶你理解java線程池之工作隊(duì)列workQueue

    這篇文章主要介紹了java線程池之工作隊(duì)列workQueue,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • java之Object類用法實(shí)例

    java之Object類用法實(shí)例

    這篇文章主要介紹了java之Object類用法實(shí)例,是Java程序設(shè)計(jì)中比較重要的概念,以實(shí)例的形式對(duì)其定義及用法做了較為深入的講解,需要的朋友可以參考下
    2014-10-10
  • springboot?整合canal實(shí)現(xiàn)示例解析

    springboot?整合canal實(shí)現(xiàn)示例解析

    這篇文章主要為大家介紹了springboot整合canal的示例實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多多進(jìn)步,早日升職加薪
    2022-02-02

最新評(píng)論