一. 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.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"><!-- 文件監測器 --> <bean id="monitor"class="com.interfaces.file.monitor.FileMonitorImpl"><constructor-arg index="0" value="10000" /> <!-- 監測時間間隔,單位:毫秒 --><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"/> <!-- 文件過濾器--><constructor-arg index="2" ref="listener"/> <!-- 文件監聽器 --></bean><!-- 文件監聽器 --> <bean id="listener"class="com.interfaces.file.monitor.FileListener"/><!-- 文件過濾器 --> <bean id="filter"class="com.interfaces.file.monitor.FileFilterImpl"> <!-- 指定文件擴展名,只有指定的擴展名文件會被處理。不同的擴展名間以 "," 間隔,如:xml,txt,bak --><constructor-arg index="0" value="xml"/> </bean></beans>
二. spring上下文加載監聽器:
SpringContextLoaderListener.class
import javax.servlet.ServletContextEvent;import org.springframework.web.context.ContextLoaderListener;public class SpringContextLoaderListener extends ContextLoaderListener{@Overridepublic void contextInitialized(ServletContextEvent event) {super.contextInitialized(event);FileMonitor scanner = getScanner();// 啟動目錄掃描器scanner.start();}@Overridepublic void contextDestroyed(ServletContextEvent event) {FileMonitor scanner = getScanner();// 關閉目錄掃描器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>
四. 文件監測器
1. 接口:FileMonitor.class
import org.apache.commons.io.monitor.FileAlterationObserver;/*** 文件監測器角色*/public interface FileMonitor {/*** 注冊觀察器* @param observer 觀察器*/void addObserver(FileAlterationObserver observer);/*** 刪除觀察器* @param observer 觀察器*/void removeObserver(FileAlterationObserver observer); /*** 獲取注冊的所有觀察器* @return 觀察器集合*/Iterable<FileAlterationObserver> getObservers(); /*** 啟動監測器*/void start(); /*** 停止監測器*/void stop(); /*** 獲取監測間隔時間* @return 間隔時間(單位:毫秒)*/long getInterval(); } 2. 實現類: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;/*** 監測器,監測時間間隔,設置文件觀察器*/public class FileMonitorImpl implements FileMonitor{private final FileAlterationMonitor monitor;/*** 監測器線程名稱*/private static final String MONITOR_THREAD_NAME = "File MONITOR Daemon";/*** 監測器線程Daemon標記*/private static final boolean DAEMON = false;/*** 定義監測時間間隔、文件觀察器* @param interval 監測時間間隔* @param observer 文件觀察者*/FileMonitorImpl(int interval, final FileAlterationObserver observer) {this(interval, observer, new BasicThreadFactory.Builder().namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build()); } /*** 定義監測時間間隔、文件觀察器和線程工廠* @param interval 監測時間間隔* @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*/@Overridepublic void addObserver(FileAlterationObserver observer) {monitor.addObserver(observer);}/*** 刪除文件觀察器 * @param observer*/@Overridepublic void removeObserver(FileAlterationObserver observer) {monitor.removeObserver(observer);}/*** 獲取注冊的所有觀察器* @return*/@Overridepublic Iterable<FileAlterationObserver> getObservers() {return monitor.getObservers();}/*** 啟動監測器*/@Overridepublic void start() {try {monitor.start();} catch (Exception e) {e.printStackTrace();}}/*** 停止監測器*/@Overridepublic void stop() {try {monitor.stop();} catch (Exception e) {e.printStackTrace();}}/*** 獲取監測時間間隔*/@Overridepublic long getInterval() {return monitor.getInterval(); }} 五. 文件觀察器
1. 接口:FileObserver.class
import java.io.File;import org.apache.commons.io.monitor.FileAlterationListener;/*** 文件觀察器角色*/public interface FileObserver {/*** 添加監聽器* @param listener*/void addListener(final FileAlterationListener listener);/*** 刪除監聽器* @param listener*/void removeListener(final FileAlterationListener listener);/*** 獲取注冊的監聽器* @return*/Iterable<FileAlterationListener> getListeners(); /*** 初始化觀察器* @throws Exception*/void initialize() throws Exception; /*** 銷毀觀察器* @throws Exception*/void destroy() throws Exception; /*** 獲取觀察的目錄* @return*/File getDirectory();/*** 獲取文件過濾器* * @return*/public FileFilter getFilter();} 2. 實現類: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;/*** 文件觀察器* * 當有文件創建、刪除、或變更動作時,則消息通知監聽器*/public class FileObserverImpl extends FileAlterationObserver implements FileObserver{private static final long serialVersionUID = -7239227289538993830L;/*** 文件過濾器*/private final FileFilter filter;/*** 設置要監聽觀察的目錄,并設置文件過濾器和監聽器,用以觀察指定具有指定擴展名的文件* @param dir 觀察監聽的目錄* @param filter 文件過濾器* @param listener 文件監聽器*/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();}}}/*** 添加監聽器*/@Overridepublic void addListener(final FileAlterationListener listener) {super.addListener(listener);}/*** 移除監聽器*/@Overridepublic void removeListener(final FileAlterationListener listener) {super.removeListener(listener);}/*** 獲取觀察者對象的所有監聽器*/@Overridepublic Iterable<FileAlterationListener> getListeners() {return super.getListeners();}/*** 初始化文件觀察者*/@Overridepublic void initialize() throws Exception {super.initialize();}/*** 銷毀文件觀察者*/@Overridepublic void destroy() throws Exception {super.destroy();}/*** 獲取所觀察的目錄*/@Overridepublic File getDirectory() {return super.getDirectory();}/*** 獲取文件過濾器* @return*/public FileFilter getFilter() {return filter;} }六. 文件監聽器:
FileListener.class
import java.io.File;import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;import org.apache.commons.io.monitor.FileAlterationObserver;/*** 文件監聽器*/public final class FileListener extends FileAlterationListenerAdaptor {/*** 文件創建時執行的動作*/@Overridepublic void onFileCreate(File file) {// To do something}/*** 文件刪除(轉移)時執行的動作*/@Overridepublic void onFileDelete(File file) {// To do something}/*** 文件內容改變時執行的動作*/@Overridepublic void onFileChange(File file) {// To do something}/*** 開始執行監聽時執行的動作*/@Overridepublic void onStart(FileAlterationObserver observer) {// To do something}/*** 停止監聽時執行的動作*/@Overridepublic void onStop(FileAlterationObserver observer) {// To do something}}七. 文件過濾器
1. 接口:FileFilter.class
/*** 文件過濾器角色,擴展自java.io.FileFilter*/public interface FileFilter extends java.io.FileFilter {/*** 獲取定義的擴展名* * @return*/String[] getExtensions();}2. 實現類:
FileFilterImpl.class
import java.io.File;import org.apache.commons.io.FilenameUtils;/*** 文件過濾器*/public class FileFilterImpl implements FileFilter{private String[] extensions;public FileFilterImpl(String... extensions) {this.extensions = extensions;}/*** 是否接受該文件*/@Overridepublic boolean accept(File pathname) {return FilenameUtils.isExtension(pathname.getName(), extensions); }/*** 獲取定義的擴展名* @return */@Overridepublic String[] getExtensions() {return extensions;}}以上所述是小編給大家介紹的Java實現文件變化監控,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
新聞熱點
疑難解答