这部分内容主要有3大类,一个是Monitor类,字面意思就是监控类咯;一个是Observer类,字面意思嘛观察类,用来观察文件的类;一个是listener类,提供各种监听时候的事件处理。
common-io-2.3下载地址:点击打开链接
就简单点吧,先看了下这几个类的构造函数,非常简单。那我就继承一下好了:
- package com.xuyi.FileListener;
- import java.io.File;
- import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
- import org.apache.commons.io.monitor.FileAlterationObserver;
- public class FileListenerAdaptor extends FileAlterationListenerAdaptor{
- @Override
- public void onStart(FileAlterationObserver arg0) {
- System.out.println("begin listening!");
- super.onStart(arg0);
- }
- @Override
- public void onStop(FileAlterationObserver arg0) {
- System.out.println("end listening!");
- super.onStop(arg0);
- }
- @Override
- public void onDirectoryCreate(File fold) {
- System.out.println("fold: "+fold.getAbsolutePath()+" is created.");
- super.onDirectoryCreate(fold);
- }
- @Override
- public void onDirectoryChange(File fold) {
- System.out.println("fold: "+fold.getAbsolutePath()+" is changed.");
- super.onDirectoryChange(fold);
- }
- @Override
- public void onDirectoryDelete(File fold) {
- System.out.println("fold: "+fold.getAbsolutePath()+" is deleted.");
- super.onDirectoryDelete(fold);
- }
- @Override
- public void onFileCreate(File file) {
- System.out.println("file: "+file.getAbsolutePath()+" is created.");
- super.onFileCreate(file);
- }
- @Override
- public void onFileChange(File file) {
- System.out.println("file: "+file.getAbsolutePath()+" is changed.");
- super.onFileChange(file);
- }
- @Override
- public void onFileDelete(File file) {
- System.out.println("file: "+file.getAbsolutePath()+" is deleted");
- super.onFileDelete(file);
- }
- }
override一下listener类的各个方法,以便自己处理一些功能。
接下来一个接口实现一下,很简单,见注释:
- package com.xuyi.FileListener;
- import java.io.File;
- import java.io.FileFilter;
- public class FileFilterImpl implements FileFilter {
- /*
- * (non-Javadoc)
- * @see java.io.FileFilter#accept(java.io.File)
- *
- * return true:返回所有目录下所有文件详细(包含所有子目录);return false:返回主目录下所有文件详细(不包含所有子目录)
- */
- public boolean accept(File pathname) {
- System.out.println("file_filter: "+pathname);
- return false;
- }
- }
接下来我们可以测试了:
- package com.xuyi;
- import java.io.File;
- import org.apache.commons.io.monitor.FileAlterationMonitor;
- import org.apache.commons.io.monitor.FileAlterationObserver;
- import com.xuyi.FileListener.FileFilterImpl;
- import com.xuyi.FileListener.FileListenerAdaptor;
- public class Test {
- public static void main(String[] args) {
- try {
- //构造观察类主要提供要观察的文件或目录,当然还有详细信息的filter
- FileAlterationObserver observer = new FileAlterationObserver(new File("J://1"),new FileFilterImpl());
- //构造收听类 没啥好说的
- FileListenerAdaptor listener = new FileListenerAdaptor();
- //为观察对象添加收听对象
- observer.addListener(listener);
- //配置Monitor,第一个参数单位是毫秒,是监听的间隔;第二个参数就是绑定我们之前的观察对象。
- FileAlterationMonitor fileMonitor = new FileAlterationMonitor(5000,new FileAlterationObserver[]{observer});
- //启动开始监听
- fileMonitor.start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }