1.nio监听文件夹变化
package com.suyl.candy.test;
import java.nio.file.*;
public class Test_ResourceListener {
public static void main(String[] args) {
try {
//创建一个监听服务
WatchService service = FileSystems.getDefault().newWatchService();
//设置路径
Path path = Paths.get("I:\\test");
//注册监听器
path.register(service, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
WatchKey watchKey;
//使用dowhile
do {
//获取一个watch key
watchKey = service.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
//如果时间列表不为空,打印事件内容
WatchEvent.Kind<?> kind = event.kind();
Path eventPath = (Path) event.context();
System.out.println(eventPath + ":" + kind + ":" + eventPath);
}
System.out.println("目录内容发生改变");
} while (watchKey.reset());
} catch (Exception e) {
e.printStackTrace();
}
// 1、通过FileSystems.getDefault().newWatchService()创建一个监听服务;
// 2、设置路径;
// 3、对目录注册一个监听器;
// 4、之后进入循环,等待watch key;
// 5、此时如果有事件发生可通过watchkey的pollevent()方法获取;
// 6、之后可以对event处理;
}
}
2.common-io实现的文件夹变化的监听
package com.suyl.candy.test;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;
import java.io.FileFilter;
public class Test_FileAlterationObserver {
public static void main(String[] args) throws Exception {
Test_FileAlterationObserver test = new Test_FileAlterationObserver();
test.test();
}
public void test() throws Exception {
String filePath = "I:\\test";
FileFilter filter = FileFilterUtils.and(new MyFileFilter());
FileAlterationObserver filealtertionObserver = new FileAlterationObserver(filePath, filter);
filealtertionObserver.addListener(new FileAlterationListenerAdaptor() {
@Override
public void onDirectoryCreate(File directory) {
// TODO Auto-generated method stub
System.out.println("onDirectoryCreate");
super.onDirectoryCreate(directory);
}
@Override
public void onDirectoryDelete(File directory) {
// TODO Auto-generated method stub
System.out.println("onDirectoryDelete");
super.onDirectoryDelete(directory);
}
@Override
public void onFileChange(File file) {
// TODO Auto-generated method stub
System.out.println("onFileChange");
super.onFileChange(file);
}
@Override
public void onFileCreate(File file) {
System.out.println("onFileCreate" + file.getAbsoluteFile());
super.onFileCreate(file);
}
@Override
public void onFileDelete(File file) {
// TODO Auto-generated method stub
System.out.println("onFileDelete" + file.getAbsolutePath());
super.onFileDelete(file);
}
@Override
public void onStart(FileAlterationObserver observer) {
// TODO Auto-generated method stub
System.out.println("onStart");
super.onStart(observer);
}
});
FileAlterationMonitor filealterationMonitor = new FileAlterationMonitor(1000);
filealterationMonitor.addObserver(filealtertionObserver);
filealterationMonitor.start();
}
}
class MyFileFilter implements IOFileFilter {
@Override
public boolean accept(File file) {
/*String extension=FilenameUtils.getExtension(file.getAbsolutePath());
if(extension!=null&&extension.equals("txt")){
return true;
}
return false;*/
return true;
}
@Override
public boolean accept(File dir, String name) {
return true;
}
}
3.log4j实现文件内容变化的监听
package com.suyl.candy.test;
import org.apache.log4j.helpers.FileWatchdog;
public class Test_Log4jWatchdog {
public static void main(String[] args) {
GloablConfig gloablconfig = new GloablConfig("I:\\test\\suyl.txt");
gloablconfig.setDelay(10000);
gloablconfig.start();
while (true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static class GloablConfig extends FileWatchdog {
protected GloablConfig(String filename) {
super(filename);
}
@Override
protected void doOnChange() {
System.out.println(filename);
}
}
}