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实现文件变化监控的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。