zoukankan      html  css  js  c++  java
  • 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秒扫描指定路径下文件的变化

  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/interdrp/p/8094498.html
Copyright © 2011-2022 走看看