一. spring配置文件:application.xml

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">

class="com.interfaces.file.monitor.FileMonitorImpl">

class="com.interfaces.file.monitor.FileObserverImpl">

class="com.interfaces.file.monitor.FileListener"/>

class="com.interfaces.file.monitor.FileFilterImpl">

二. 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

contextConfigLocation

classpath:application.xml

com.web.SpringContextLoaderListener

四. 文件监测器

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 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 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 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 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实现文件变化监控的方法(推荐)相关推荐

  1. matlab的dat文件如何打开方式,dat文件如何打开?DAT文件用什么文件打开介绍

    DAT文件如何打开?对于这个文件大家可能还不是很了解,下面绿茶小编为大家详细介绍DAT文件是什么以及dat文件用什么软件打开方法.希望对大家有所帮助. dat文件是什么? DAT是是数据流格式,即我们 ...

  2. 压缩包里面是html文件怎么打开方式,RAR文件怎么打开 RAR格式文件正确打开方式...

    很多用户在新安装系统或者购买新电脑回来下载文件的时候,经常会看到.RAR的文件,对用小白用户来说,这可难到他们了,那么关于RAR文件该怎样打开呢?一起来看看吧. 其实RAR文件是压缩文件的一种,用户需 ...

  3. java音频文件怎么打开_java 怎么读取音乐文件

    展开全部 以随机读写方式打开一个MP3文件 将文件指针32313133353236313431303231363533e58685e5aeb931333337613838偏移量移动到文件长度倒数128 ...

  4. java xml 大文件怎么打开_JAVA xml 流方式读取。数据挖掘大文件预处理。

    importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReade ...

  5. java 文件预览_Java实现文件的预览

    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法.我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365 使用 ...

  6. java jar 是什么文件_jar文件怎么打开?jar文件是什么?

    系统迷今天继续给大家分享个科普知识吧.很多朋友不知道jar文件是什么,在这里,我就简单做下记录,方便后来需要的朋友查询了解.jar文件其实是Java项目下生成的项目文件,当然也有用户称之为Java压缩 ...

  7. java 文件随机读取_Java 实现文件随机读写-RandomAccessFile

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...

  8. java创建文件夹代码_Java创建文件夹及文件实例代码

    package com.xhkj.util; import java.io.File; import java.io.IOException; public class CreateFileUtil ...

  9. java 获取md5值报错_java获取文件的MD5值

    package com.sichang.util; import java.io.File; import java.io.FileInputStream; import java.math.BigI ...

最新文章

  1. 【HDOJ】1754 I Hate It
  2. 云栖大会|感受万物数字化,体验千行视频化
  3. 如何用 Nacos 构建服务网格生态?
  4. brother标签打印软件_标签打印软件如何设计食品留样标签模板
  5. OpenCV:Surface Matching 3D
  6. android activity生命周期_Android岗高频面试题合一集,看你能答出几题?
  7. 精度高、模型小、速度快!梯形DenseNets结构实现语义分割新高度!
  8. PTA5-19 求链式线性表的倒数第K项
  9. web应用,HTTP协议以及Django初次认识与安装
  10. Python面试宝典
  11. vsto 批量删除列
  12. QQ空间自动删除说说的js脚本(亲测有效)
  13. 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍
  14. 开源轻量级企业内容管理系统-鱼跃CMS v2.0.0
  15. Structure Boundary Preserving Segmentation for Medical Image with Ambiguous Boundary
  16. IMEI,IMSI和ICCID
  17. Laravel Eloquent 小技巧
  18. 根据排队论阐述路由器和高速公路的拥堵以及拥堵缓解问题
  19. 视频-视频基础(H264)
  20. codeforce#420 E. Okabe and El Psy Kongroo(图论+矩阵快速幂)

热门文章

  1. loadrunner11安装,提示少了Microsoft Visual c++2005 sp1运行时组件解决办法
  2. iOS获取某个日期后n个月的日期
  3. 在VMware开启此虚拟机时出现内部错误
  4. 使用复合设计模式扩展持久化的CURD,Select能力
  5. bzoj:2018 [Usaco2009 Nov]农场技艺大赛
  6. NYOJ - 78 圈水池 【凸包】
  7. #include 中的stat.h文件到底在哪个目录下面?
  8. C++/C中mutalbe与volatile的详解
  9. linux module_init
  10. 51单片机——硬件基础