• java监控指定路径下文件及文件夹变化


    之前用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能将一个输入流分别输出到两个输出流

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

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

    listener:

    /*
    * Version 1.0.0
    * Created on 2017年12月23日
    * Copyright ReYo.Cn
    */
    package reyo.sdk.utils.test.file;
    
    import java.io.File;
    
    import org.apache.commons.io.monitor.FileAlterationListener;
    import org.apache.commons.io.monitor.FileAlterationObserver;
    
    /**
    * <B>创  建 人:</B>AdministratorReyoAut <BR>
    * <B>创建时间:</B>2017年12月23日 下午9:25:21<BR>
    *
    * @author ReYo
    * @version 1.0
    */
    public class ReYoFileListener implements FileAlterationListener {
    
    	ReYoFileMonitor monitor = null;
    
    	@Override
    	public void onStart(FileAlterationObserver observer) {
    		//System.out.println("onStart");
    	}
    
    	@Override
    	public void onDirectoryCreate(File directory) {
    		System.out.println("onDirectoryCreate:" + directory.getName());
    	}
    
    	@Override
    	public void onDirectoryChange(File directory) {
    		System.out.println("onDirectoryChange:" + directory.getName());
    	}
    
    	@Override
    	public void onDirectoryDelete(File directory) {
    		System.out.println("onDirectoryDelete:" + directory.getName());
    	}
    
    	@Override
    	public void onFileCreate(File file) {
    		System.out.println("onFileCreate:" + file.getName());
    	}
    
    	@Override
    	public void onFileChange(File file) {
    		System.out.println("onFileCreate : " + file.getName());
    	}
    
    	@Override
    	public void onFileDelete(File file) {
    		System.out.println("onFileDelete :" + file.getName());
    	}
    
    	@Override
    	public void onStop(FileAlterationObserver observer) {
    		//System.out.println("onStop");
    	}
    
    }
    

     monitor

    /*
    * Version 1.0.0
    * Created on 2017年12月23日
    * Copyright ReYo.Cn
    */
    package reyo.sdk.utils.test.file;
    
    import java.io.File;
    
    import org.apache.commons.io.monitor.FileAlterationListener;
    import org.apache.commons.io.monitor.FileAlterationMonitor;
    import org.apache.commons.io.monitor.FileAlterationObserver;
    
    /**
    * <B>创  建 人:</B>AdministratorReyoAut <BR>
    * <B>创建时间:</B>2017年12月23日 下午9:26:08<BR>
    *
    * @author ReYo
    * @version 1.0
    */
    public class ReYoFileMonitor {
    
    	FileAlterationMonitor monitor = null;
    
    	public ReYoFileMonitor(long interval) throws Exception {
    		monitor = new FileAlterationMonitor(interval);
    	}
    
    	public void monitor(String path, FileAlterationListener listener) {
    		FileAlterationObserver observer = new FileAlterationObserver(new File(path));
    		monitor.addObserver(observer);
    		observer.addListener(listener);
    	}
    
    	public void stop() throws Exception {
    		monitor.stop();
    	}
    
    	public void start() throws Exception {
    		monitor.start();
    	}
    
    	public static void main(String[] args) throws Exception {
    		ReYoFileMonitor m = new ReYoFileMonitor(5000);
    		m.monitor("D:\temp", new ReYoFileListener());
    		m.start();
    	}
    }
    

     启动后,每5秒扫描指定路径下文件的变化

  • 相关阅读:
    mysql uodate 报错 You can't specify target table '**' for update in FROM clause
    设置mysql InnoDB存储引擎下取消自动提交事务
    SQL插入数据--数据中的某一列来自本表中的数据
    服务器部署静态页面
    json 和 jsonp
    Git 回滚
    java 自定义注解
    java BlockingQueque的多种实现
    java 多线程之ReentrantLock与condition
    storm 架构原理
  • 原文地址:https://www.cnblogs.com/interdrp/p/8094498.html
Copyright © 2020-2023  润新知