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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
* 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
* 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秒扫描指定路径下文件的变化

posted @   锐洋智能  阅读(8241)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过
点击右上角即可分享
微信分享提示