Java文件实时监控Commons-io
今天看到一网友写的 Java 文件监控,实时监控文件加载 ,突然想到Commons-io中已有此功能的实现,先温习下 写个简单的Demo:
- package wy.util.filemonitor;
- import java.io.File;
- import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
- import org.apache.commons.io.monitor.FileAlterationObserver;
- import org.apache.log4j.Logger;
- /**
- * 文件变化监听器
- *
- * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下:
- * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver,
- * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描)
- *
- * @author wy
- *
- */
- public class FileListener extends FileAlterationListenerAdaptor {
- private Logger log = Logger.getLogger(FileListener.class);
- /**
- * 文件创建执行
- */
- @Override
- public void onFileCreate(File file) {
- log.info("[新建]:" + file.getAbsolutePath());
- }
- /**
- * 文件创建修改
- */
- @Override
- public void onFileChange(File file) {
- log.info("[修改]:" + file.getAbsolutePath());
- }
- /**
- * 文件删除
- */
- @Override
- public void onFileDelete(File file) {
- log.info("[删除]:" + file.getAbsolutePath());
- }
- /**
- * 目录创建
- */
- @Override
- public void onDirectoryCreate(File directory) {
- log.info("[新建]:" + directory.getAbsolutePath());
- }
- /**
- * 目录修改
- */
- @Override
- public void onDirectoryChange(File directory) {
- log.info("[修改]:" + directory.getAbsolutePath());
- }
- /**
- * 目录删除
- */
- @Override
- public void onDirectoryDelete(File directory) {
- log.info("[删除]:" + directory.getAbsolutePath());
- }
- @Override
- public void onStart(FileAlterationObserver observer) {
- // TODO Auto-generated method stub
- super.onStart(observer);
- }
- @Override
- public void onStop(FileAlterationObserver observer) {
- // TODO Auto-generated method stub
- super.onStop(observer);
- }
- }
- package wy.util.filemonitor;
- import java.util.concurrent.TimeUnit;
- import org.apache.commons.io.filefilter.FileFilterUtils;
- import org.apache.commons.io.monitor.FileAlterationMonitor;
- import org.apache.commons.io.monitor.FileAlterationObserver;
- /**
- * 文件监控测试
- *
- * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下:
- * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver,
- * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描)
- *
- * @author wy
- *
- */
- public class FileMonitorTest {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception{
- // 监控目录
- String rootDir = "F:\\Resume";
- // 轮询间隔 5 秒
- long interval = TimeUnit.SECONDS.toMillis(5);
- // 创建一个文件观察器用于处理文件的格式
- FileAlterationObserver _observer = new FileAlterationObserver(
- rootDir,
- FileFilterUtils.and(
- FileFilterUtils.fileFileFilter(),
- FileFilterUtils.suffixFileFilter(".txt")), //过滤文件格式
- null);
- FileAlterationObserver observer = new FileAlterationObserver(rootDir);
- observer.addListener(new FileListener()); //设置文件变化监听器
- //创建文件变化监听器
- FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
- // 开始监控
- monitor.start();
- }
- }
看下结果:

==============================================================================
那位网友的帖子:http://www.iteye.com/topic/1127281
还有位网友的帖子:http://dyccsxg.iteye.com/blog/618993
两位的思路都很相似,基本上是采用线程轮询的方式,但在校验文件更新的时候一位采用的文件校验码及hash码,另一位是采用文件的最后修改时间(lastModified()
).
Java文件实时监控Commons-io的更多相关文章
- Java实现文件夹下文件实时监控
一.commons-io方法 1.使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的 (1)可以监控文件夹的创建.删除和修改 (2)可以监控文件的创 ...
- iotop实时监控磁盘io
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
- Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)
最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列. 这里先给大家一本关于vijava开发的书,比较实用. 地址:http://pan.baidu.com/s/1gfkl9mj. ...
- Jmeter实时监控+SpringBoot接口性能实战
性能测试 Jmeter实时监控+SpringBoot接口性能实战 自动化 SpringBoot Java Jmeter实时监控+SpringBoot接口性能实战 一.实验目的及实验环境 1.1.实验目 ...
- java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)
首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...
- Java (四)APACHE Commons IO 复制文件
上一篇:Java (三)APACHE Commons IO 常规操作 例1:复制文件 1 import java.io.File; 2 import java.io.IOException; 3 4 ...
- java实现文件变化监控
一. spring配置文件:application.xml <?xml version="1.0" encoding="UTF-8"?> <b ...
- Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FileUtils
1.错误叙述性说明 警告: Could not create JarEntryRevision for [jar:file:/D:/MyEclipse/apache-tomcat-7.0.53/web ...
- IO与文件读写---使用Apache commons IO包提高读写效率
觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...
随机推荐
- laravel学习笔记2--表单
一.Controller 1.Request 1.1.取值:input // 1.取值 echo $request->input('name'); // 2.取不到值时打印默认值 echo $r ...
- zabbix源码安装后,设置为服务启动和关闭
zabbix源码安装,使用service启动与关闭服务 1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本,在/usr/local/src/zabbix ...
- [安装] mac安装PHP7经历
背景 前几天在mac上跑workrman,由于workerman需要开启多个进程,多进程需要pcntl扩展的支持,我之前那个brew安装的php71没有这个扩展,就直接卸载了php71,然后想下载源码 ...
- ruby on rails使用gmail的smtp发送邮件
参考至http://guides.rubyonrails.org/action_mailer_basics.html 在gmail账户的安全里先开启两步验证(链接:https://myaccount. ...
- 《深入浅出深度学习:原理剖析与python实践》第八章前馈神经网络(笔记)
8.1 生物神经元(BN)结构 1.人脑中有100亿-1000亿个神经元,每个神经元大约会和其他1万个神经元相连 2.细胞体:神经元的主体,细胞体=细胞核+细胞质+细胞膜,存在膜电位 3.树突:从细胞 ...
- Python之套接字
Python之套接字 客户端Client/服务端Server架构: 1.硬件C/S架构 2.软件C/S架构 OSI4层:4层里有五层,五层里又有7层. 四层---------五层--------七层 ...
- 对django中间件的理解
1. 什么是中间件(Django)? 对Django而言,中间件就是继承自MiddlewareMixin(位于django.utils.deprecation模块下)的类,该类对请求(request) ...
- eclipse导入项目时报错不能运行问题的一个记录
一直用学校的云桌面,但是还是有一些地方不是很方便,必须要校园网以及需要离线保存: 碰到的问题:重新安装和云桌面一样版本的jdk9.0.4,以及tomcat9.0.12,以及eclipse-oxygen ...
- 集训第六周 数学概念与方法 UVA 11181 条件概率
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18546 题意:有n个人会去超市,其中只有r个人会买东西,每个人独自买东西的概 ...
- 【转】jquery 注册事件的方法
原文链接:http://outofmemory.cn/code-snippet/2123/jquery-zhuce-event-method 1.使用事件名来绑定,可用的事件名有 change,cli ...