Java实现文件变化监控_java

一. 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">
<!-- 文件监测器 -->
<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{
@Override
public void contextInitialized(ServletContextEvent event) {
super.contextInitialized(event);
FileMonitor scanner = getScanner();
// 启动目录扫描器
scanner.start();
}
@Override
public 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
*/
@Override
public void addObserver(FileAlterationObserver observer) {
monitor.addObserver(observer);
}
/**
* 删除文件观察器
* @param observer
*/
@Override
public void removeObserver(FileAlterationObserver observer) {
monitor.removeObserver(observer);
}
/**
* 获取注册的所有观察器
* @return
*/
@Override
public Iterable<FileAlterationObserver> getObservers() {
return monitor.getObservers();
}
/**
* 启动监测器
*/
@Override
public void start() {
try {
monitor.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 停止监测器
*/
@Override
public void stop() {
try {
monitor.stop();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取监测时间间隔
*/
@Override
public 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();
}
}
}
/**
* 添加监听器
*/
@Override
public void addListener(final FileAlterationListener listener) {
super.addListener(listener);
}
/**
* 移除监听器
*/
@Override
public void removeListener(final FileAlterationListener listener) {
super.removeListener(listener);
}
/**
* 获取观察者对象的所有监听器
*/
@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();
}
/**
* 获取文件过滤器
* @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 {
/**
* 文件创建时执行的动作
*/
@Override
public void onFileCreate(File file) {
// To do something
}
/**
* 文件删除(转移)时执行的动作
*/
@Override
public void onFileDelete(File file) {
// To do something
}
/**
* 文件内容改变时执行的动作
*/
@Override
public void onFileChange(File file) {
// To do something
}
/**
* 开始执行监听时执行的动作
*/
@Override
public void onStart(FileAlterationObserver observer) {
// To do something
}
/**
* 停止监听时执行的动作
*/
@Override
public 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;
}
/**
* 是否接受该文件
*/
@Override
public boolean accept(File pathname) {
return FilenameUtils.isExtension(pathname.getName(), extensions);
}
/**
* 获取定义的扩展名
* @return
*/
@Override
public String[] getExtensions() {
return extensions;
}
}

以上所述是小编给大家介绍的Java实现文件变化监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java文件监控
java实现网站变化监控、java监控文件变化、java监控文件内容变化、java监控文件夹变化、java实时监控文件变化,以便于您获取更多的相关知识。

时间: 2024-11-08 17:26:31

Java实现文件变化监控_java的相关文章

java实现文件变化监控的方法(推荐)_java

一. 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://ww

4种java复制文件的方式_java

尽管Java提供了一个可以处理文件的IO操作类,但是没有一个复制文件的方法.复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候.然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式. 1. 使用FileStreams复制 这是最经典的方式将一个文件的内容复制到另一个文件中. 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B. 这是第一个方法的代码: private static void copyFileUsin

Java 读取文件方法大全_java

1.按字节读取文件内容 public class ReadFromFile { public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); in

浅析java创建文件和目录_java

一,创建文件和目录的关键技术点如下:    1.File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败       2.File类的mkdir方法根据抽象路径创建目录       3.File类的mkdirs方法根据抽象路径创建目录,包括创建不存在的父目录       4.File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀.后缀及文件所在的目录,如果不指定              目录,则存放在系统的临时文

java文件操作之java写文件简单示例_java

代码很简单,直接上代码,大家参考使用吧 复制代码 代码如下: package com.it.login.service; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import

java工具类之实现java获取文件行数_java

工具类代码,取得当前项目中所有java文件总行数,代码行数,注释行数,空白行数 复制代码 代码如下: import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.Reader;import

java 读写文件[多种方法]_java

java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 */ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import j

简单的java读取文件示例分享_java

可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下来需要解读成乙方可以理解的东西 既然你使用了FileInputStream().那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据 解读完成后要输出呀.那当然要转换成IO可以识别

java实现文件导入导出_java

文件导入导出必须代码 ExportExcel.java /** * Copyright 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. */ package com.thinkgem.jeesite.common.utils.excel; import java.io.FileNotFoundException; import jav