java监控路径下文件变化

来源:互联网 发布:java中冒泡排序法代码 编辑:程序博客网 时间:2024/05/16 07:57

之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包。主要有下面几点不同:1. WatchService是采用扫描式的,效率低,commons-io是使用事件驱动的,效率高;2. WatchService代码写起来费劲 3.  WatchService不能监听到孙文件目录(多级目录),事先父文件夹需要存在,而FileAlterationObserver可以监听多级目录,父目录事先不存在也没问题。http://commons.apache.org/proper/commons-io/,

commons-io功能介绍: 
  1)  工具类   FilenameUtils
  2) FileMonitor工具类包,监听该文件及文件夹变化
  3)filters过滤org.apache.commons.io.filefilter
  4) Comparators org.apache.commons.io.comparator包下的工具类,可以方便进行文件的比较
  5) input/output包  common io的org.apache.commons.io.input/ org.apache.commons.io.output 包,其中好特别的是TeeOutputStream能将一个输入流分别输出到两个输出流

http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html
http://www.myexception.cn/apache/1777847.html


转载源:http://blog.csdn.net/masternick/article/details/12197141

commons-io-2.3.jar 中,有实现文件监控的类,在org.apache.commons.io.monitor包下,

主要包括 observer ,listener,monitor 含义你懂得滴,典型观察者模式,直接上代码:

listener:

[java] view plaincopy
  1. public class ZJPFileListener implements FileAlterationListener{  
  2.   
  3.       
  4.     ZJPFileMonitor monitor = null;  
  5.     @Override  
  6.     public void onStart(FileAlterationObserver observer) {  
  7.         //System.out.println("onStart");  
  8.     }  
  9.     @Override  
  10.     public void onDirectoryCreate(File directory) {  
  11.         System.out.println("onDirectoryCreate:" +  directory.getName());  
  12.     }  
  13.   
  14.     @Override  
  15.     public void onDirectoryChange(File directory) {  
  16.         System.out.println("onDirectoryChange:" + directory.getName());  
  17.     }  
  18.   
  19.     @Override  
  20.     public void onDirectoryDelete(File directory) {  
  21.         System.out.println("onDirectoryDelete:" + directory.getName());  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onFileCreate(File file) {  
  26.         System.out.println("onFileCreate:" + file.getName());  
  27.     }  
  28.   
  29.     @Override  
  30.     public void onFileChange(File file) {  
  31.         System.out.println("onFileCreate : " + file.getName());  
  32.     }  
  33.   
  34.     @Override  
  35.     public void onFileDelete(File file) {  
  36.         System.out.println("onFileDelete :" + file.getName());  
  37.     }  
  38.   
  39.     @Override  
  40.     public void onStop(FileAlterationObserver observer) {  
  41.         //System.out.println("onStop");  
  42.     }  
  43.   
  44. }  
monitor
[java] view plaincopy
  1. public class ZJPFileMonitor {  
  2.       
  3.     FileAlterationMonitor monitor = null;  
  4.     public ZJPFileMonitor(long interval) throws Exception {  
  5.         monitor = new FileAlterationMonitor(interval);  
  6.     }  
  7.   
  8.     public void monitor(String path, FileAlterationListener listener) {  
  9.         FileAlterationObserver observer = new FileAlterationObserver(new File(path));  
  10.         monitor.addObserver(observer);  
  11.         observer.addListener(listener);  
  12.     }  
  13.     public void stop() throws Exception{  
  14.         monitor.stop();  
  15.     }  
  16.     public void start() throws Exception {  
  17.         monitor.start();  
  18.     }  
  19.     public static void main(String[] args) throws Exception {  
  20.         ZJPFileMonitor m = new ZJPFileMonitor(5000);  
  21.         m.monitor("E:\\filepath",new ZJPFileListener());  
  22.         m.start();  
  23.     }  

启动后,每5秒扫描指定路径下文件的变化,很方便
0 0
原创粉丝点击