今天看到一网友写的 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. 树莓派 -- oled 续(1) wiringPi

    在上文中,分析了wiringPi 的oled demo是使用devfs来控制spi master和spi slave通讯. https://blog.csdn.net/feiwatson/articl ...

  2. 树莓派2-SSH

    树莓派3系统SSH是默认关闭的, 将SD卡插入linux, 在root 分区, 修改/etc/rc.local 在exit 0前增加一行 /ect/init.d/ssh start 将SD卡插回树莓派 ...

  3. Courses on Turbulence

    Courses on Turbulence Table of Contents 1. Lecture 1.1. UIUC Renewable energy and turbulent environm ...

  4. 如何在matlab里安装libsvm包

    有时我们需要用到SVR(支持向量回归)方法,而 matlab 自带的svm工具箱不能做回归分析,于是有了安装libsvm包的打算. 中间遇到一些困难,比如找不到编译器等等,经过一下午和一晚上的努力,在 ...

  5. c# TcpClient简易聊天工具

    说明: TcpClient 链接是一个比较安全稳定的链接,作为聊天或者是数据稳定传输,是比较合适的,下面的代码测试过,如果你吧他放在公网服务器上,也是可以用的 using System; using ...

  6. 60. Spring Boot写后感【从零开始学Spring Boot】

    从2016年4月15日到2016年7月20日经历长达3个月的时间,[从零开始学习Spring Boot]系列就要告一段落了.国内的各种资源都比较乱或者是copy 来copy去的,错了也不加以修正下,导 ...

  7. hdu 5073 推公式相邻质心转换

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 51000 int cmp(co ...

  8. Android 4.4.2上与BLE 蓝牙锁设备的通讯

    Android从4.3(Api level 18)开始支持BLE的开发,本文记录了Android 4.4.2设备与BLE设备通讯的流程. 权限需求: <uses-permission andro ...

  9. hunnu - 11545 小明的烦恼——找路径 (最大流)

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11545 只是要求不经过相同的边,那么每次找出一条增广路T-- ...

  10. SOJ 2800_三角形

    真的是O不是0[看了discuss才发现.....一个大写的蠢 [题意]多个黑白三角形组成的倒三角,求白三角形组成的最大倒三角的面积 [分析]由于问的是倒三角个数,所以只需看与行数奇偶性相同的白色倒三 ...