java实现文件变化监控的方法(推荐)
一.spring配置文件:application.xml
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.directwebremoting.org/schema/spring-dwrhttp://www.directwebremoting.org/schema/spring-dwr-3.0.xsd http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd"> <!--文件监测器--> <beanid="monitor" class="com.interfaces.file.monitor.FileMonitorImpl"> <constructor-argindex="0"value="10000"/><!--监测时间间隔,单位:毫秒--> <constructor-argindex="1"ref="observer"/><!--文件观察器--> </bean> <!--文件观察器--> <beanid="observer" class="com.interfaces.file.monitor.FileObserverImpl"> <constructor-argindex="0"value="D:\\UploadDir"/><!--观察的目录--> <constructor-argindex="1"ref="filter"/><!--文件过滤器--> <constructor-argindex="2"ref="listener"/><!--文件监听器--> </bean> <!--文件监听器--> <beanid="listener" class="com.interfaces.file.monitor.FileListener"/> <!--文件过滤器--> <beanid="filter" class="com.interfaces.file.monitor.FileFilterImpl"> <!-- 指定文件扩展名,只有指定的扩展名文件会被处理。 不同的扩展名间以","间隔,如:xml,txt,bak --> <constructor-argindex="0"value="xml"/> </bean> </beans>
二.spring上下文加载监听器:SpringContextLoaderListener.class
importjavax.servlet.ServletContextEvent; importorg.springframework.web.context.ContextLoaderListener; publicclassSpringContextLoaderListenerextendsContextLoaderListener{ @Override publicvoidcontextInitialized(ServletContextEventevent){ super.contextInitialized(event); FileMonitorscanner=getScanner(); //启动目录扫描器 scanner.start(); } @Override publicvoidcontextDestroyed(ServletContextEventevent){ FileMonitorscanner=getScanner(); //关闭目录扫描器 scanner.stop(); super.contextDestroyed(event); } /** *获取目录扫描器 *@return */ privateFileMonitorgetScanner(){ returngetCurrentWebApplicationContext().getBean(FileMonitor.class); } }
三.web工程配置文件:web.xml
<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns: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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_4.xsdhttp://xmlns.jcp.org/xml/ns/javaeehttp://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
importorg.apache.commons.io.monitor.FileAlterationObserver; /** *文件监测器角色 */ publicinterfaceFileMonitor{ /** *注册观察器 *@paramobserver观察器 */ voidaddObserver(FileAlterationObserverobserver); /** *删除观察器 *@paramobserver观察器 */ voidremoveObserver(FileAlterationObserverobserver); /** *获取注册的所有观察器 *@return观察器集合 */ Iterable<FileAlterationObserver>getObservers(); /** *启动监测器 */ voidstart(); /** *停止监测器 */ voidstop(); /** *获取监测间隔时间 *@return间隔时间(单位:毫秒) */ longgetInterval(); }
2.实现类:FileMonitorImpl.class
importjava.util.concurrent.ThreadFactory; importorg.apache.commons.io.monitor.FileAlterationMonitor; importorg.apache.commons.io.monitor.FileAlterationObserver; importorg.apache.commons.lang3.concurrent.BasicThreadFactory; /** *监测器,监测时间间隔,设置文件观察器 */ publicclassFileMonitorImplimplementsFileMonitor{ privatefinalFileAlterationMonitormonitor; /** *监测器线程名称 */ privatestaticfinalStringMONITOR_THREAD_NAME="FileMONITORDaemon"; /** *监测器线程Daemon标记 */ privatestaticfinalbooleanDAEMON=false; /** *定义监测时间间隔、文件观察器 *@paraminterval监测时间间隔 *@paramobserver文件观察者 */ FileMonitorImpl(intinterval,finalFileAlterationObserverobserver){ this(interval,observer, newBasicThreadFactory.Builder(). namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build()); } /** *定义监测时间间隔、文件观察器和线程工厂 *@paraminterval监测时间间隔 *@paramobserver文件观察器 *@paramfactory线程工厂 */ FileMonitorImpl(intinterval,finalFileAlterationObserverobserver, finalThreadFactoryfactory){ this.monitor=newFileAlterationMonitor(interval,newFileAlterationObserver[]{observer}); monitor.setThreadFactory(factory); } /** *添加文件观察器 *@paramobserver */ @Override publicvoidaddObserver(FileAlterationObserverobserver){ monitor.addObserver(observer); } /** *删除文件观察器 *@paramobserver */ @Override publicvoidremoveObserver(FileAlterationObserverobserver){ monitor.removeObserver(observer); } /** *获取注册的所有观察器 *@return */ @Override publicIterable<FileAlterationObserver>getObservers(){ returnmonitor.getObservers(); } /** *启动监测器 */ @Override publicvoidstart(){ try{ monitor.start(); } catch(Exceptione){ e.printStackTrace(); } } /** *停止监测器 */ @Override publicvoidstop(){ try{ monitor.stop(); } catch(Exceptione){ e.printStackTrace(); } } /** *获取监测时间间隔 */ @Override publiclonggetInterval(){ returnmonitor.getInterval(); } }
五. 文件观察器
1.接口:FileObserver.class
importjava.io.File; importorg.apache.commons.io.monitor.FileAlterationListener; /** *文件观察器角色 */ publicinterfaceFileObserver{ /** *添加监听器 *@paramlistener */ voidaddListener(finalFileAlterationListenerlistener); /** *删除监听器 *@paramlistener */ voidremoveListener(finalFileAlterationListenerlistener); /** *获取注册的监听器 *@return */ Iterable<FileAlterationListener>getListeners(); /** *初始化观察器 *@throwsException */ voidinitialize()throwsException; /** *销毁观察器 *@throwsException */ voiddestroy()throwsException; /** *获取观察的目录 *@return */ FilegetDirectory(); /** *获取文件过滤器 * *@return */ publicFileFiltergetFilter(); }
2.实现类:FileObserverImpl.class
importjava.io.File; importjava.io.IOException; importorg.apache.commons.io.FileUtils; importorg.apache.commons.io.IOCase; importorg.apache.commons.io.monitor.FileAlterationListener; importorg.apache.commons.io.monitor.FileAlterationObserver; /** *文件观察器 * *当有文件创建、删除、或变更动作时,则消息通知监听器 */ publicclassFileObserverImplextendsFileAlterationObserverimplementsFileObserver{ privatestaticfinallongserialVersionUID=-7239227289538993830L; /** *文件过滤器 */ privatefinalFileFilterfilter; /** *设置要监听观察的目录,并设置文件过滤器和监听器,用以观察指定具有指定扩展名的文件 *@paramdir观察监听的目录 *@paramfilter文件过滤器 *@paramlistener文件监听器 */ publicFileObserverImpl(Stringdir,finalFileFilterfilter, FileAlterationListenerlistener){ super(dir,filter,(IOCase)null); addListener(listener); this.filter=filter; Filedirectory=newFile(dir); //如果目录不存在 if(!directory.exists()){ try{ FileUtils.forceMkdir(directory); } catch(IOExceptione){ e.printStackTrace(); } } //如果存在的是文件 elseif(directory.exists()&&directory.isFile()){ try{ FileUtils.forceDelete(directory); FileUtils.forceMkdir(directory); } catch(IOExceptione){ e.printStackTrace(); } } } /** *添加监听器 */ @Override publicvoidaddListener(finalFileAlterationListenerlistener){ super.addListener(listener); } /** *移除监听器 */ @Override publicvoidremoveListener(finalFileAlterationListenerlistener){ super.removeListener(listener); } /** *获取观察者对象的所有监听器 */ @Override publicIterable<FileAlterationListener>getListeners(){ returnsuper.getListeners(); } /** *初始化文件观察者 */ @Override publicvoidinitialize()throwsException{ super.initialize(); } /** *销毁文件观察者 */ @Override publicvoiddestroy()throwsException{ super.destroy(); } /** *获取所观察的目录 */ @Override publicFilegetDirectory(){ returnsuper.getDirectory(); } /** *获取文件过滤器 *@return */ publicFileFiltergetFilter(){ returnfilter; } }
六.文件监听器:FileListener.class
importjava.io.File; importorg.apache.commons.io.monitor.FileAlterationListenerAdaptor; importorg.apache.commons.io.monitor.FileAlterationObserver; /** *文件监听器 */ publicfinalclassFileListenerextendsFileAlterationListenerAdaptor{ /** *文件创建时执行的动作 */ @Override publicvoidonFileCreate(Filefile){ //Todosomething } /** *文件删除(转移)时执行的动作 */ @Override publicvoidonFileDelete(Filefile){ //Todosomething } /** *文件内容改变时执行的动作 */ @Override publicvoidonFileChange(Filefile){ //Todosomething } /** *开始执行监听时执行的动作 */ @Override publicvoidonStart(FileAlterationObserverobserver){ //Todosomething } /** *停止监听时执行的动作 */ @Override publicvoidonStop(FileAlterationObserverobserver){ //Todosomething } }
七.文件过滤器
1.接口:FileFilter.class
/** *文件过滤器角色,扩展自java.io.FileFilter */ publicinterfaceFileFilterextendsjava.io.FileFilter{ /** *获取定义的扩展名 * *@return */ String[]getExtensions(); }
2.实现类:FileFilterImpl.class
importjava.io.File; importorg.apache.commons.io.FilenameUtils; /** *文件过滤器 */ publicclassFileFilterImplimplementsFileFilter{ privateString[]extensions; publicFileFilterImpl(String...extensions){ this.extensions=extensions; } /** *是否接受该文件 */ @Override publicbooleanaccept(Filepathname){ returnFilenameUtils.isExtension(pathname.getName(),extensions); } /** *获取定义的扩展名 *@return */ @Override publicString[]getExtensions(){ returnextensions; } }
以上这篇java实现文件变化监控的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。