今天看到一网友写的 Java 文件监控,实时监控文件加载 ,突然想到Commons-io中已有此功能的实现,先温习下 写个简单的Demo:

有三种方式:
1、java common.io    内部实现是遍历的方式,小文件夹的效率还好,比如我测试60G的目录,就很慢很慢了。(我使用这个)
2、jdk 7 的watch service    //经测试基本不可用。在一个40g的很深的目录下去新建和删除文件5分钟都没结果。主要原因是需要对每一个Path进行注册监控。
3、jnotify                   直接调用windows的api,效率很高,也很简单,推荐使用。
common.io
需要java.io 2.1及其以上版本。
版本地址如下:
http://commons.apache.org/io/download_io.cgi
  1. package wy.util.filemonitor;
  2. import java.io.File;
  3. import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
  4. import org.apache.commons.io.monitor.FileAlterationObserver;
  5. import org.apache.log4j.Logger;
  6. /**
  7. * 文件变化监听器
  8. *
  9. * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下:
  10. * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver,
  11. * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描)
  12. *
  13. * @author wy
  14. *
  15. */
  16. public class FileListener extends FileAlterationListenerAdaptor {
  17. private Logger log = Logger.getLogger(FileListener.class);
  18. /**
  19. * 文件创建执行
  20. */
  21. @Override
  22. public void onFileCreate(File file) {
  23. log.info("[新建]:" + file.getAbsolutePath());
  24. }
  25. /**
  26. * 文件创建修改
  27. */
  28. @Override
  29. public void onFileChange(File file) {
  30. log.info("[修改]:" + file.getAbsolutePath());
  31. }
  32. /**
  33. * 文件删除
  34. */
  35. @Override
  36. public void onFileDelete(File file) {
  37. log.info("[删除]:" + file.getAbsolutePath());
  38. }
  39. /**
  40. * 目录创建
  41. */
  42. @Override
  43. public void onDirectoryCreate(File directory) {
  44. log.info("[新建]:" + directory.getAbsolutePath());
  45. }
  46. /**
  47. * 目录修改
  48. */
  49. @Override
  50. public void onDirectoryChange(File directory) {
  51. log.info("[修改]:" + directory.getAbsolutePath());
  52. }
  53. /**
  54. * 目录删除
  55. */
  56. @Override
  57. public void onDirectoryDelete(File directory) {
  58. log.info("[删除]:" + directory.getAbsolutePath());
  59. }
  60. @Override
  61. public void onStart(FileAlterationObserver observer) {
  62. // TODO Auto-generated method stub
  63. super.onStart(observer);
  64. }
  65. @Override
  66. public void onStop(FileAlterationObserver observer) {
  67. // TODO Auto-generated method stub
  68. super.onStop(observer);
  69. }
  70. }
  1. package wy.util.filemonitor;
  2. import java.util.concurrent.TimeUnit;
  3. import org.apache.commons.io.filefilter.FileFilterUtils;
  4. import org.apache.commons.io.monitor.FileAlterationMonitor;
  5. import org.apache.commons.io.monitor.FileAlterationObserver;
  6. /**
  7. * 文件监控测试
  8. *
  9. * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下:
  10. * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver,
  11. * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描)
  12. *
  13. * @author wy
  14. *
  15. */
  16. public class FileMonitorTest {
  17. /**
  18. * @param args
  19. */
  20. public static void main(String[] args) throws Exception{
  21. // 监控目录
  22. String rootDir = "F:\\Resume";
  23. // 轮询间隔 5 秒
  24. long interval = TimeUnit.SECONDS.toMillis(5);
  25. // 创建一个文件观察器用于处理文件的格式
  26. FileAlterationObserver _observer = new FileAlterationObserver(
  27. rootDir,
  28. FileFilterUtils.and(
  29. FileFilterUtils.fileFileFilter(),
  30. FileFilterUtils.suffixFileFilter(".txt")),  //过滤文件格式
  31. null);
  32. FileAlterationObserver observer = new FileAlterationObserver(rootDir);
  33. observer.addListener(new FileListener()); //设置文件变化监听器
  34. //创建文件变化监听器
  35. FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
  36. // 开始监控
  37. monitor.start();
  38. }
  39. }

看下结果:

==============================================================================

那位网友的帖子:http://www.iteye.com/topic/1127281

还有位网友的帖子:http://dyccsxg.iteye.com/blog/618993

两位的思路都很相似,基本上是采用线程轮询的方式,但在校验文件更新的时候一位采用的文件校验码及hash码,另一位是采用文件的最后修改时间(lastModified()
).

Java文件实时监控Commons-io的更多相关文章

  1. Java实现文件夹下文件实时监控

    一.commons-io方法 1.使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的 (1)可以监控文件夹的创建.删除和修改 (2)可以监控文件的创 ...

  2. iotop实时监控磁盘io

    介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...

  3. Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)

    最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列. 这里先给大家一本关于vijava开发的书,比较实用. 地址:http://pan.baidu.com/s/1gfkl9mj. ...

  4. Jmeter实时监控+SpringBoot接口性能实战

    性能测试 Jmeter实时监控+SpringBoot接口性能实战 自动化 SpringBoot Java Jmeter实时监控+SpringBoot接口性能实战 一.实验目的及实验环境 1.1.实验目 ...

  5. java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)

    首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...

  6. Java (四)APACHE Commons IO 复制文件

    上一篇:Java (三)APACHE Commons IO 常规操作 例1:复制文件 1 import java.io.File; 2 import java.io.IOException; 3 4 ...

  7. java实现文件变化监控

    一. spring配置文件:application.xml <?xml version="1.0" encoding="UTF-8"?> <b ...

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

  9. IO与文件读写---使用Apache commons IO包提高读写效率

    觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...

随机推荐

  1. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  2. table中JS选取行列

    <table border="1" align="center" style="width: 500px" id="doct ...

  3. 集训第五周动态规划 C题 编辑距离

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  4. python——进制间的转换

    int(string_num, n)  string_num表示某种进制的字符串,n表示string_num是什么进制数 2.8.16 进制转为10进制:使用int()或者eval() 10 进制转为 ...

  5. 获取某一个<tr>中<td>的值

    $("#trId").children("td").eq(0).text(};    //当前行的第一个<td>的值    <td>下标 ...

  6. 九度oj 题目1525:子串逆序打印

    题目1525:子串逆序打印 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3124 解决:530 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在 ...

  7. [luoguP1489] 猫狗大战(DP)

    传送门 类似背包的做法. f[i][j]表示是否能放i个物品,价格为j #include <cstdio> #include <iostream> #define N 8001 ...

  8. 百度音乐免费API接口

    音乐分类: 1.新歌榜,2.热歌榜,11.摇滚榜,12.爵士,16.流行21.欧美金曲榜,22.经典老歌榜,23.情歌对唱榜,24.影视金曲榜,25.网络歌曲榜 说明:百度music web版全接口h ...

  9. 从零开始写STL-内存部分-内存分配器allocator

    从零开始写STL-内存部分-内存分配器allocator 内存分配器是什么? 一般而言,c++的内存分配和释放是这样操作的 >>class Foo{ //...}; >>Foo ...

  10. 洛谷 P2033 Chessboard Dance

    P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...