java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

场景编辑器竣工!

今天接着做XML解析,对那个遍历的结构作了些修改,插入了几个函数。 终于,新的场景编辑器竣工了! 一个比较复杂的场景了,用3dsMax制作材质,安排物件位置和所用材质 导出到DirectX中,效果感觉比Max…

将MathType公式转换为Blog可用的LaTeX公式(MD编辑器)

会LaTex语法的同学敲起来还是会快一些的。 符号参考: LaTeX 各种命令,符号Latex所有常用数学符号整理 不会的同学,可以按照以下方式操作: 在MathType内先敲好公式 可以手敲,也可以手写(手写调用windows的…

java trim 不好使_Java String trim无效

7 个答案:答案 0 :(得分:49)该网站的源代码显示了特殊的html字符 。尝试在java字符串中搜索或替换以下内容:\u00A0。rank rank.replaceAll("\u00A0", "");应该有效。也许添加一个双\\而不是\。答案 1 :(得分:6)您应该将…

JQuery + Json 练习随笔

早就听说JQuery Ajax的方便快捷以及Json优秀的数据交换,今天有空尝试了一下,菜鸟了一番。对初步的使用也算是有个比较抽象的理解吧。记录之备忘! json简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人…

java jxl 写 excel文件_java采用jxl写入一个Excel文件

jxl写入一个excel文件。读取方面请看下面相关链接,上一遍是关于读取excel的。package com.javaer.file;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.Writab…

LeetCode 313. 超级丑数(动态规划)

1. 题目 编写一段程序来查找第 n 个超级丑数。 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。 示例: 输入: n 12, primes [2,7,13,19] 输出: 32 解释: 给定长度为 4 的质数列表 primes [2,7,13,19], 前 12 个超级丑数序列为&#xf…

Visual Studio 2010 旗舰版免序列号安装体验

Visual Studio 2010 E文版已经发布多时,由于工作原因没有及早的下载体验,直到前几天园子里的朋友放出了下载简体中文的种子 ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/于是决定下来…

java 类的高级特性_java程序-类的高级特性

创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后在实现接口中的定义的CompareTo方法,将对象按编号升序排列。代码如下:(程序可能有些错误…

潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)

文章目录1. 狄利克雷分布2. 潜在狄利克雷分配模型3. 学习推理4. sklearn.decomposition.LatentDirichletAllocation潜在狄利克雷分配(latent Dirichlet allocation,LDA),作为基于 贝叶斯学习的话题模型,是潜在语义分析…

JMF入门(Java Media Framework)

JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库,JMF的推出已经有几年的历史了,目前最新的版本为 2.1.1e,这里我们来讲述使用Java的AWT组件来开发一个视频播放器,采用JMF作为视频的播放库,…

LeetCode 983. 最低票价(动态规划)

1. 题目 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。 在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。 每一项是一个从 1 到 365 的整数。 火车票有三种不同的销售方式: 一张为期一天的通行证售价为 co…

final 数组 java_Java Final数组列表

您是正确的声明列表最终意味着您无法将列表变量重新分配给另一个对象.另一个问题(我想)是public class SomeClass {private static final ArrayList list new ArrayList();}VSpublic class SomeClass {ArrayList list new ArrayList();}我们轮流使用每个修饰符.private只有这…

生活点滴语录

1、gmail与chrome,高效实用,简单大方。生活中用到的两款google产品,确实喜欢。2、g.cn,值得信任。-------简洁明了,深入人心。3、深度,值得深入。-------精髓的解说。4、有人说态度决定一切,有人…

LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。 当你位于下标 i 处时,你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意,不管是什么情况下&#xff…

mysql错误日志为aborting_MySQL 错误日志(Error Log)

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件。通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志能够帮助我们定位mysqld内部发生的事件&#xff0…

this和arguments

this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象。但是在javascript中,由于javascript的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行…

LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷, ‘E’ 代表一个未挖出的空方块, ‘B’ 代表没有相邻(上,下,左…

java 使用jar_Java 使用JAR文件

JAR,Java Archive File,Java档案文件。JAR文件是一种压缩文件,与ZIP压缩文件兼容,通常称为JAR包。JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件,是在生成JAR文件时由系统自动创建的。使用JAR文件与以下…

Flash 与数学:圆的切线(3)

在上面几节当中,已经了解过计算圆上任意一点的切线的方法,我们首先知道使用导数几何意义在哪里?在我们高中数学和大学的数学当中,说明了。导数的几何意义函数yf(x)在点x0处导数为f(x0)在几何上表示曲线yf&a…

LeetCode 1110. 删点成林(二叉树递归)

1. 题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序…