FileAlterationListenerAdaptor实现文件监听
定义文件监听器FileListener
public class FileListener extends FileAlterationListenerAdaptor {
//private ConsumerContainer consumerContainer;
//private ImportContainer importContainer;
public FileListener() {
}
//这里可以通过构造器注入业务Bean
//public FileListener(ConsumerContainer consumerContainer, ImportContainer importContainer) {
// this.consumerContainer = consumerContainer;
// this.importContainer = importContainer;
//}
@Override
public void onStart(final FileAlterationObserver observer) {
//实现单轮监听开始的操作
}
@Override
public void onDirectoryCreate(final File directory) {
//实现对应的目录创建动作的操作
}
@Override
public void onDirectoryChange(final File directory) {
//实现对应的目录变更动作的操作
}
@Override
public void onDirectoryDelete(final File directory) {
//实现对应的目录删除动作的操作
}
@Override
public void onFileCreate(File file) {
//实现对应的文件创建动作的操作
}
@Override
public void onFileChange(File file) {
//实现对应的文件修改动作的操作
}
@Override
public void onFileDelete(File file) {
//实现对应的文件删除动作的操作
}
@Override
public void onStop(final FileAlterationObserver observer) {
//单轮监听结束动作
}
}
以上方法并非必须实现,按需选择其中几个方法进行实现就可以
定义对应的文件监听工厂类FileListenerFactory
@Component
public class FileListenerFactory {
//@Autowired
//private ConsumerContainer consumerContainer;
//@Autowired
//private ImportContainer importContainer;
//设置监听间隔
private final long interval = TimeUnit.SECONDS.toMillis(10);
public FileAlterationMonitor getMonitor() throws Exception {
File file = new File("对应的要监听的文件目录");
if(!file.exists()){
file.mkdirs();
}
// 创建过滤器
IOFileFilter directories = FileFilterUtils.and(
FileFilterUtils.directoryFileFilter(),
HiddenFileFilter.VISIBLE);
IOFileFilter files = FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
//定义监听文件后缀
FileFilterUtils.suffixFileFilter(".json"));
IOFileFilter filter = FileFilterUtils.or(directories, files);
// 装配过滤器
// FileAlterationObserver observer = new FileAlterationObserver(new File(monitorDir));
FileAlterationObserver observer = new FileAlterationObserver(file, filter);
//可以选择注入业务Bean
//FileListener fileListener = new FileListener(consumerContainer, importContainer);
FileListener fileListener = new FileListener();
// 向监听者添加监听器
observer.addListener(fileListener);
File[] files1 = file.listFiles(e -> e.getName().endsWith(monitorFileSuffix));
for (File file1 : files1) {
fileListener.onFileCreate(file1);
}
// observer.addListener(new FileListener(listenerService));
// 返回监听者
return new FileAlterationMonitor(interval, observer);
}
}
项目启动时开启监听
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Autowired
private FileListenerFactory fileListenerFactory;
@Override
public void run(ApplicationArguments args) throws Exception {
createFileListener();
}
public void createFileListener() throws Exception {
// 创建监听者
FileAlterationMonitor fileAlterationMonitor = fileListenerFactory.getMonitor();
try {
//开启监听
fileAlterationMonitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}