点击下载commons io
测试代码一
package com.jdy.test
import org.apache.commons.io.filefilter.FileFilterUtils
import org.apache.commons.io.filefilter.HiddenFileFilter
import org.apache.commons.io.filefilter.IOFileFilter
import org.apache.commons.io.monitor.FileAlterationListener
import org.apache.commons.io.monitor.FileAlterationMonitor
import org.apache.commons.io.monitor.FileAlterationObserver
import com.jdy.listener.FileAlterationListenerImpl
public class FileTest {
public static void main(String[] args) {
// 创建文件监听器
FileAlterationListener listener = new FileAlterationListenerImpl()
// 创建文件过滤器
IOFileFilter directories = FileFilterUtils.and(
FileFilterUtils.directoryFileFilter(),
HiddenFileFilter.VISIBLE)
IOFileFilter files = FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".txt"))
IOFileFilter fileFilter = FileFilterUtils.or(directories, files)
// 创建文件观察器
String directory = "D:/folder"
FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter)
observer.addListener(listener)
// 创建文件监控器
long interval = 1000l
FileAlterationMonitor monitor = new FileAlterationMonitor(interval)
monitor.addObserver(observer)
try {
monitor.start()
} catch (Exception e) {
e.printStackTrace()
}
//主线程循环打印100次
for (int i = 0
System.out.println(Thread.currentThread().getName() + " --> "+ i)
try {
Thread.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
测试代码二
package com.jdy.test
import java.io.FileFilter
import org.apache.commons.io.monitor.FileAlterationListener
import org.apache.commons.io.monitor.FileAlterationMonitor
import org.apache.commons.io.monitor.FileAlterationObserver
import com.jdy.filter.FileFilterImpl
import com.jdy.listener.FileAlterationListenerImpl
public class FileTest2 {
public static void main(String[] args) {
// 创建文件监听器
FileAlterationListener listener = new FileAlterationListenerImpl()
// 创建文件观察器
String directory = "D:/folder"
FileFilter fileFilter = new FileFilterImpl()
FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter)
observer.addListener(listener)
// 创建文件监控器
long interval = 1000l
FileAlterationMonitor monitor = new FileAlterationMonitor(interval)
monitor.addObserver(observer)
try {
monitor.start()
} catch (Exception e) {
e.printStackTrace()
}
//主线程循环打印100次
for (int i = 0
System.out.println(Thread.currentThread().getName() + " --> "+ i)
try {
Thread.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
自定义监听器
package com.jdy.listener;
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class FileAlterationListenerImpl extends FileAlterationListenerAdaptor {
@Override
public void onDirectoryChange(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryChange");
super.onDirectoryChange(directory);
}
@Override
public void onDirectoryCreate(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryCreate");
super.onDirectoryCreate(directory);
}
@Override
public void onDirectoryDelete(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryDelete");
super.onDirectoryDelete(directory);
}
@Override
public void onFileChange(File file) {
System.out.println(file.getName() + " ---> onFileChange");
super.onFileChange(file);
}
@Override
public void onFileCreate(File file) {
System.out.println(file.getName() + " ---> onFileCreate");
super.onFileCreate(file);
}
@Override
public void onFileDelete(File file) {
System.out.println(file.getName() + " ---> onFileDelete");
super.onFileDelete(file);
}
@Override
public void onStart(FileAlterationObserver observer) {
System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStart");
super.onStart(observer);
}
@Override
public void onStop(FileAlterationObserver observer) {
System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStop");
super.onStop(observer);
}
}
自定义过滤器
package com.jdy.filter;
import java.io.File;
import org.apache.commons.io.filefilter.FileFileFilter;
public class FileFilterImpl extends FileFileFilter {
private static final long serialVersionUID = 1L;
@Override
public boolean accept(File file) {
System.out.println(file.getName() + "accept");
return super.accept(file);
}
}
打印结果
main
D:\folder
D:\folder
main
D:\folder
D:\folder
main
D:\folder
D:\folder
main
D:\folder
11.txt
22.txt
33.txt
D:\folder
main