Java 文件监控,实时监控文件加载之Commons-io

转载 2016年06月01日 16:10:39

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

 

Java代码 复制代码 收藏代码
  1. package wy.util.filemonitor;  
  2.   
  3. import java.io.File;  
  4.   
  5. import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;  
  6. import org.apache.commons.io.monitor.FileAlterationObserver;  
  7. import org.apache.log4j.Logger;  
  8.   
  9. /** 
  10.  * 文件变化监听器 
  11.  *  
  12.  * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下: 
  13.  * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver, 
  14.  * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描) 
  15.  *  
  16.  * @author wy 
  17.  *  
  18.  */  
  19. public class FileListener extends FileAlterationListenerAdaptor {  
  20.     private Logger log = Logger.getLogger(FileListener.class);  
  21.   
  22.     /** 
  23.      * 文件创建执行 
  24.      */  
  25.     @Override  
  26.     public void onFileCreate(File file) {  
  27.         log.info("[新建]:" + file.getAbsolutePath());  
  28.     }  
  29.   
  30.     /** 
  31.      * 文件创建修改 
  32.      */  
  33.     @Override  
  34.     public void onFileChange(File file) {  
  35.         log.info("[修改]:" + file.getAbsolutePath());  
  36.     }  
  37.   
  38.     /** 
  39.      * 文件删除 
  40.      */  
  41.     @Override  
  42.     public void onFileDelete(File file) {  
  43.         log.info("[删除]:" + file.getAbsolutePath());  
  44.     }  
  45.   
  46.     /** 
  47.      * 目录创建 
  48.      */  
  49.     @Override  
  50.     public void onDirectoryCreate(File directory) {  
  51.         log.info("[新建]:" + directory.getAbsolutePath());  
  52.     }  
  53.   
  54.     /** 
  55.      * 目录修改 
  56.      */  
  57.     @Override  
  58.     public void onDirectoryChange(File directory) {  
  59.         log.info("[修改]:" + directory.getAbsolutePath());  
  60.     }  
  61.   
  62.     /** 
  63.      * 目录删除 
  64.      */  
  65.     @Override  
  66.     public void onDirectoryDelete(File directory) {  
  67.         log.info("[删除]:" + directory.getAbsolutePath());  
  68.     }  
  69.   
  70.     @Override  
  71.     public void onStart(FileAlterationObserver observer) {  
  72.         // TODO Auto-generated method stub  
  73.         super.onStart(observer);  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onStop(FileAlterationObserver observer) {  
  78.         // TODO Auto-generated method stub  
  79.         super.onStop(observer);  
  80.     }  
  81.   
  82. }  
Java代码 复制代码 收藏代码
  1. package wy.util.filemonitor;  
  2.   
  3. import java.util.concurrent.TimeUnit;  
  4.   
  5. import org.apache.commons.io.filefilter.FileFilterUtils;  
  6. import org.apache.commons.io.monitor.FileAlterationMonitor;  
  7. import org.apache.commons.io.monitor.FileAlterationObserver;  
  8.   
  9. /** 
  10.  * 文件监控测试 
  11.  *  
  12.  * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下: 
  13.  * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver, 
  14.  * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描) 
  15.  *  
  16.  * @author wy 
  17.  * 
  18.  */  
  19. public class FileMonitorTest {  
  20.   
  21.     /** 
  22.      * @param args 
  23.      */  
  24.     public static void main(String[] args) throws Exception{  
  25.         // 监控目录    
  26.         String rootDir = "F:\\Resume";    
  27.         // 轮询间隔 5 秒    
  28.         long interval = TimeUnit.SECONDS.toMillis(5);  
  29.         // 创建一个文件观察器用于处理文件的格式    
  30.         FileAlterationObserver _observer = new FileAlterationObserver(    
  31.                                               rootDir,     
  32.                                               FileFilterUtils.and(    
  33.                                                FileFilterUtils.fileFileFilter(),    
  34.                                                FileFilterUtils.suffixFileFilter(".txt")),  //过滤文件格式    
  35.                                               null);    
  36.         FileAlterationObserver observer = new FileAlterationObserver(rootDir);  
  37.           
  38.         observer.addListener(new FileListener()); //设置文件变化监听器    
  39.         //创建文件变化监听器    
  40.         FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);    
  41.         // 开始监控    
  42.         monitor.start();    
  43.     }  
  44.   
  45. }  

 

看下结果:


 

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

 

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

 

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

 

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

 

Java实时监控日志文件并输出

 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数...
  • cnq2328
  • cnq2328
  • 2015年12月14日 12:43
  • 1727

Java 自带性能监控工具:监视和管理控制台 jconsole 的使用

想验证你对 jvm 配的一些调优参数有没有起作用吗?想不想实时监控你自定义的线程池的在实际运行时的线程个数、有没有死锁?想不想实时监控你的 Java 应用的堆内存使用情况,并根据峰值等数据设置最适合你...
  • defonds
  • defonds
  • 2015年04月15日 20:45
  • 21751

common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法《很全的监听文件例子》)

文件监听中有java自带的fileOberver和fileOberverable这两个通过观察者模式进行监听,例如:在主程序中ResolveFileObserver fileObserver = ne...

最新common-io-2.0的新功能之文件监控FileAlteration

这部分内容主要有3大类,一个是Monitor类,字面意思就是监控类咯;一个是Observer类,字面意思嘛观察类,用来观察文件的类;一个是listener类,提供各种监听时候的事件处理。   就简...

java监控路径下文件变化

之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包。主要有下面几点不同:1. WatchService是采用扫描式...

JAVA轻量级文件监控

本文主要介绍一个轻量级的文件监控方式,对文件的Create & Change & Delete,都有一个对应的Event方法来进行处理。对于核心的File Monitor Class,我们继承一个监听...

Java IO最详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见...
  • yczz
  • yczz
  • 2014年08月22日 20:14
  • 218905

Java监控文件夹或文件的变动

Java监控文件夹或文件的变动 很多时候我们需要对文件夹或者文件进行监控,已观察其是否被删除、创建或者修改,然后根据文件的行为进行相应的后续处理,以往的话多数是通过轮询去观察文件夹或者文件的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java 实现监控某目录文件变化

commons-io-2.3.jar 中,有实现文件监控的类,在org.apache.commons.io.monitor包下, 主要包括 observer ,listener,monitor 含义你...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 文件监控,实时监控文件加载之Commons-io
举报原因:
原因补充:

(最多只允许输入30个字)