使用Apache的Commons-io开发包,可以实现对文件或文件夹的创建、大小改变、删除进行监听,也可以对指的文件类型进行监听(例如:文件名后缀,文件创建日期....)
一 下载
可以去Apache的官网下载最新的Commons-io的jar包及源码,下载地址为:http://commons.apache.org/proper/commons-io/download_io.cgi
二 开发实现
1. 实现一个文件修改监听器继承 FileAlterationListener.java 类:
package org.abel.test;
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
/**
* 适配器,告知调用者文件状态变化
* @author Abel
*/
public class MyFileAlterationListener extends FileAlterationListenerAdaptor {
//文件夹创建
@Override
public void onDirectoryCreate(File directory) {
System.out.println(directory.getName()+" directory Create");
}
//文件夹改变
@Override
public void onDirectoryChange(File directory) {
System.out.println(directory.getName()+" directory Change");
}
//文件夹删除
@Override
public void onDirectoryDelete(File directory) {
System.out.println(directory.getName()+" directory Delete");
}
//文件创建
@Override
public void onFileCreate(File file) {
super.onFileCreate(file);
System.out.println(file.getName()+" file Create");
}
//文件夹改变
@Override
public void onFileChange(File file) {
super.onFileChange(file);
System.out.println(file.getName()+" file Change");
}
//文件删除
@Override
public void onFileDelete(File file) {
super.onFileDelete(file);
System.out.println(file.getName()+" file Delete");
}
}
2. 调用
package org.abel.test;
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class FileAlterationMonitorTest {
public static void main(String[] args) {
File dir = new File("E:\\testDir");
//监听器
FileAlterationMonitor monitor = new FileAlterationMonitor();
/*//1. 不指定监听类型, 则会监听两种类型: 文件 及 子文件夹
//2. 指定监听类型,只指定监听文件的类型,例如 ".txt"文件, 则在子文件夹下的".txt"文件变化不会监听,只会监听E:\\testDir下的文件变化
IOFileFilter fileFileter = FileFilterUtils.and(FileFilterUtils.fileFileFilter(),FileFilterUtils.suffixFileFilter(".txt"));
//3. 指定监听类型,只指定监听文件夹,则文件的变化不会监听到(不论是在文件夹下的还是在子文件夹下的)
IOFileFilter dirFilter = FileFilterUtils.and(FileFilterUtils.directoryFileFilter(),HiddenFileFilter.VISIBLE);
//4. 指定两种监听类型,文件及文件夹,则会监听两种,文件夹及文件(不论是在文件夹下的还是在子文件夹下的)
IOFileFilter filter = FileFilterUtils.or(fileFileter,dirFilter);*/
//观察者
FileAlterationObserver observer = new FileAlterationObserver(dir/*,filter*/);
observer.addListener(new MyFileAlterationListener());
monitor.addObserver(observer);
try {
//开始监听
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}