在commons-io中提供了实时监控文件目录文件变化的功能.
整体是按观察者模式设计的,共有三部分: observer, listener, monitor.
监听器 FileAlterationListener: 文件改变时触发的行为.
观察者 FileAlterationObserver: 观察文件的改变, 通知注册的监听器执行相应的事件.
监视器 FileAlterationMonitor: Monitor本身也是Runnable线程, 每间隔一段时间调用一次注册的观察者检查文件.
定义文件或目录监听事件, 包括文件或目录的创建,删除.
public class FileListener extends FileAlterationListenerAdaptor {
public void onDirectoryCreate(File directory) {
// do something
}
public void onFileCreate(File file) {
// do something
}
}
定义观察文件路径和监听间隔, 并启动监控器.
monitor是实现Runnable接口, 也是一个线程, 在调用start()方法后, 启动该线程.
observer中通过checkAndNotify()方法进行比较时, 是通过记录的前次文件夹内容和文件的元数据信息与当前时刻的文件夹内容和文件的元数据信息进行比较. 并通过注册的Listener 反馈给用户.
FileAlterationMonitor monitor = new FileAlterationMonitor(5000);
FileListener listener = new FileListener();
FileAlterationObserver observer = new FileAlterationObserver(new File(path));
observer.addListener(listener);
monitor.addObserver(observer);
monitor.start();
在停止监控时一定要调用stop()方法, 释放线程资源.
monitor.stop();
pom.xml
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>