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 ...
随机推荐
- <Redis> 入门三 事务
Redis事务是什么 1.可以一次执行多个命令,本质是一组命令的集合. 2.一个事务中的所有命令都会被序列化,按顺序串行化执行而不会被其他命令插入,不许加塞. 意味着redis在事务执行的过程中,不允 ...
- 关于ie8下disabled属性:字体颜色问题
在ie8下,input/textarea输入框如果使用disabled属性,字体的颜色会变灰,这时我们可以使用另一种方法实现它. 不使用disabled,用readonly代替: input[read ...
- SPOJ ARCTAN
POJ1183 除输入方式外与这道题完全一样 题目大意是给定一个a 求最小的满足arctan(1/A)=arctan(1/B)+arctan(1/C) 的B+C的最小值 根据上述递推规律,我们只要从2 ...
- CSU1217
就跟数字出现奇数次道理是一样的,将一个数转化为2进制后找出现奇数次个1的位置,最后将其输出来便是出现奇数次的数 #include <cstdio> int main() { int n,a ...
- [ 浙江大学 程序设计专题 ] 四个专题代码 报告 PPT共享
[原创]转载请注明出处,请勿用于作弊 专题一: 链接: https://pan.baidu.com/s/11xCwvuPHDkTPeOB_yzJWnw 提取码: prup 专题二: 链接: https ...
- openjudge7627 鸡蛋的硬度
描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法- ...
- hdu4701 Game(递推博弈)
题意: Alice初始有A元,Bob有B元. 有N个物品,第i个物品价值为Ci.Alice和Bob轮流买一些(>=1)物品.不能移动的人输.购买有一个限制,对于第1 个之后物品,只有当第i-1个 ...
- HashMap的工作原理以及代码实现,为什么要转换成红黑树?
原理参考:https://blog.csdn.net/striveb/article/details/84657326 总结: 为什么当桶中键值对数量大于8才转换成红黑树,数量小于6才转换成链表? 参 ...
- Spring boot精要
1.自动配置:针对很多Spring应用程序的常见应用功能,SpringBoot能自动提供相关配置: 2.起步依赖:告诉SpringBoot需要什么功能,他就能引入需要的库: 3.命令行界面:这是Spr ...
- Dubbo-admin无法显示Group分组信息
背景: 在首次使用Dubbo的时候.我们可能都会使用Dubbo-admin来监控服务的提供者和消费者,可是在自己的生产者成功执行的时候.在Dubbo-admin却看不到不论什么信息.假设在确保代码的正 ...