今天看到一网友写的 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. sysbench--mysql测试

    1.下载sysbench-0.4.12.14.tar.gz 2.解压.tar -zxf sysbench-0.4.12.14.tar.gz 3.编译: 填写mysql路劲. ./configure - ...

  2. mysql基准测试与sysbench工具

    一.基准测试简介  1.什么是基准测试 数据库的基准测试是对数据库的性能指标进行定量的.可复现的.可对比的测试. 基准测试与压力测试 基准测试可以理解为针对系统的一种压力测试.但基准测试不关心业务逻辑 ...

  3. laravel框架应用和composer扩展包开发

    laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,laravel框架思想前卫,跟随时代潮 ...

  4. BNUOJ 3226 Godfather

    Godfather Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID:  ...

  5. node的express框架,核心第三方模块body-parser 获取我们所有post请求传过来数据

    - 安装 body-parser模块- npm install body-parser -S - 调用- let bodyParser=require('body-parser'); - 设置中间件- ...

  6. idea导入(import)项目和打开(open)项目的区别

    前言: 每次接手老项目,都得从git或svn下载下来,但是如果之前的项目不是用idea写的怎么办,可是你又习惯啦idea,那你必须把项目在idea上跑起来,那是用import还是用open呢,如何抉择 ...

  7. codevs1154 能量项链

    题目描述 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  8. iOS 数据库操作崩溃提示“ int rc = sqlite3_step([_statement statement]);”或者提示“ rc = sqlite3_step(pStmt);”

    数据库崩溃崩溃提示“ int rc = sqlite3_step([_statement statement]);”或者提示“ rc      = sqlite3_step(pStmt);”的时候,可 ...

  9. zoj——3195 Design the city

    Design the city Time Limit: 1 Second      Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...

  10. Servlet的Cookies处理

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/cookies-handling.html: Cookies是存储在客户端计算机上的文本文件,用于 ...