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();
		}
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值