在开发中经常会用到监控文件或是目录的状态,如果你还在手写轮巡扫描文件的话,那你久out了。

1. Commons io为我们提供了一套可靠、高性能的一套文件系统监控API

1.1. 需要的jar包如下,具体版本可根据自己需要选取:

  • commons-logging-1.1.1.jar
  • log4j-1.2.15.jar

1.2. 在文件监控系统的中,首先要理解几个角色:

  • Observer:观察者,拥有文件路径、文件过滤器、文件比较器(监控器用它来判断文件的状态变化:新增、修改、删除、等等),可以向他添加相关的监听器;
  • Listener:监听器,当文件系统发生变化时,将会执行它的相关方法。其实,在文件状态发生变化时,观察者会根据文件比较器来拿到文件的变化状态,根据变化状态的不同来调用监听器中不同的方法;
  • Monitor:监控器,可设置监控文件系统的时间间隔、文件观察者等信息。

1.3. 代码实现步骤如下:

1.3.1. 实现监听器

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* 文件监听器
* @author leocook(leocook@163.com)
* @version 1.0
* @date 2014-06-30
*/
public class MyFileListener extends FileAlterationListenerAdaptor {
private static Log log = LogFactory.getLog(MyFileListener.class);
/**
* 目录发生变化
* @param directory 发生变化的目录
*/
@Override
public void onDirectoryChange(File directory) {
super.onDirectoryChange(directory);
log.info("文件夹改变:" +directory.getAbsolutePath());
} /**
* 新建目录
* @param directory 被新建的目录
*/
@Override
public void onDirectoryCreate(File directory) {
super.onDirectoryCreate(directory);
log.info("新建目录:" +directory.getAbsolutePath());
} /**
* 删除目录
* @param directory 被删除目录
*/
@Override
public void onDirectoryDelete(File directory) {
super.onDirectoryDelete(directory);
log.info("删除目录:" +directory.getAbsolutePath());
} /**
* 文件发生变化
* @param file 发生变化的文件
*/
@Override
public void onFileChange(File file) {
super.onFileChange(file);
log.info("修改文件:" +file.getAbsolutePath());
} /**
* 新建文件
* @param file 被新建的文件
*/
@Override
public void onFileCreate(File file) {
super.onFileCreate(file);
log.info("新建文件:"+file.getAbsolutePath());
} /**
* 删除文件
* @param file 被删除的文件
*/
@Override
public void onFileDelete(File file) {
super.onFileDelete(file);
log.info("删除文件:" +file.getAbsolutePath());
} /**
* 检查文件开始
* @param observer 文件观察者
*/
@Override
public void onStart(FileAlterationObserver observer) {
super.onStart(observer);
// log.info("开始检查...");
} /**
* 检查文件结束
* @param observer 文件观察者
*/
@Override
public void onStop(FileAlterationObserver observer) {
super.onStop(observer);
// log.info("结束检查...");
}
}

1.3.2. 观察者、监控器的调用

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* 文件系统监测测试类
* @author leocook(leocook@163.com)
* @version 1.0
* @date 2014-06-30
*/
public class Main {
private static Log log = LogFactory.getLog(Main.class); /**
* 测试文件系统监测
* @param String[] args
*/
public static void main(String[] args) {
long interval = 1000; final String path = "/home/leocook/test";
FileAlterationObserver observer = null; try {
observer = new FileAlterationObserver(path, null, null);
//添加监听器
observer.addListener(new MyFileListener()); FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
monitor.start();
} catch (Exception e) {
log.error("Exception", e);
}
}
}

1.4. Commons io包中对文件系统监控体系中,还有类org.apache.commons.io.monitor.FileEntry,关于它的具体用法笔者不再一一介绍。

1.5. 参考链接

  • http://blog.csdn.net/xiaoyezi1001/article/details/28095281

Java 实现对文件系统的监控的更多相关文章

  1. Inotify: 高效、实时的Linux文件系统事件监控框架

      Inotify: 高效.实时的Linux文件系统事件监控框架   概要 - 为什么需要监控文件系统? 在日常工作中,人们往往需要知道在某些文件(夹)上都有那些变化,比如:   通知配置文件的改变 ...

  2. (转)Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

    Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步原文:http://www.summerspacestation.com/linux%E4%B8%8B%E9%80 ...

  3. Java系列笔记(4) - JVM监控与调优【转】

    Java系列笔记(4) - JVM监控与调优[转]   目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在 ...

  4. nmon+Java Nmon Analyser进行nmon监控数据可视化分析

    我们知道nmon是一款轻量级的系统占用极少,监控功能非常强大支持跨平台ARM,centos,ubuntu等等系统的工具下载地:centos7 wget http://sourceforge.net/p ...

  5. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  6. Java NIO教程 文件系统

    在NIO.2的文件系统中,Path是一切操作的基础.Path准确来说,代表着文件系统中的位置.可以代表一个目录(也就是通常所说的文件夹),也可以代表一个文件. 在新文件系统中,还有一个不得不说的就是F ...

  7. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  8. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  9. 使用Java提供的MXBean来监控jvm创建了哪些线程

    MBean是一种JavaBean,MBean往往代表的是JMX中的一种可以被管理的资源.MBean会通过接口定义,给出这些资源的一些特定操作: 属性的读和写操作 可以被执行的操作 关于自己的描述信息 ...

随机推荐

  1. win10 uwp 重启软件

    在16299支持在软件自己重启,不需要让用户点击关闭然后启动,虽然我还不知道这个有什么用.本文告诉大家如何让软件关闭重新打开. 首先需要使用的版本是 16299 ,然后使用 RequestRestar ...

  2. nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引

    今天添加新项目想添加几个工具包,打开NuGet就这样了  发生错误如下: [nuget.org] 无法加载源 https://api.nuget.org/v3/index.json 的服务索引. 响应 ...

  3. Caused by: org.hibernate.HibernateException: identifier of an instance of ... is alterde from

    Caused by: org.hibernate.HibernateException: identifier of an instance of ... is alterde from     Hi ...

  4. Centos7宽带连接

    网上大多教程都是虚拟机上实现宽带连接的,但是实际有差别 装完系统最头疼的就是宽带连接 转自:centos创建宽带连接-EnchanterBlue-ChinaUnix博客 http://blog.chi ...

  5. 精尽 Kafka 学习指南【优秀学习指南汇总】

    1. 视频 炼石成金 <中间件之 Kafka> 一共有 19P .概念部分讲的蛮细的. 尚硅谷 <大数据视频_Kafka视频教程> 一共 24P .讲的还不错的. 书生小四 & ...

  6. HDU1560(KB2-E IDA星)

    DNA sequence Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  7. 微信网页授权获取code

    <script> var code = GetQueryString('code'); var callback = 'personal.html'; var appId = " ...

  8. c#如何将子窗体显示到父窗体的容器(panel)控件中

    如何将一个窗体显示到一个容器控件中,刚开始想的比较简单,用窗体容器控件添加一般控件的方法,试了一试,代码如下: Form2 frm = new Form2(); this.panel1.Control ...

  9. CSS之换行

    在项目中,常常遇到一些问题,可以通过CSS来快速解决,比如受到布局影响会导致内容溢出,这个时候就可以使用CSS换行解决 自动换行: { word-wrap:break-word; } 强制不换行: { ...

  10. C#防止WebBrowser在新窗口中打开链接页面

    在日常的开发中,大家有时需要用WebBrowser加载URL,来实现某些功能.而这时,我们就不希望所打开的页面中的链接,在新窗口中打开,因为这样的话,实际上是用系统默认的浏览器打开了,从而脱离了你的W ...