前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >监听文件和文件夹

监听文件和文件夹

作者头像
用户10125653
发布2024-03-29 11:30:11
750
发布2024-03-29 11:30:11
举报
文章被收录于专栏:changechange

添加依赖

  • Gradle
代码语言:javascript
复制
compile('commons-io:commons-io:2.6')
  • Maven
代码语言:javascript
复制
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

设置监听器

代码语言:javascript
复制
public class FileListener extends FileAlterationListenerAdaptor {
 
    // 声明业务服务
    private ListenerService listenerService;
 
    // 采用构造函数注入服务
    public FileListener(ListenerService listenerService) {
        this.listenerService = listenerService;
    }
 
    // 文件创建执行
    @Override
    public void onFileCreate(File file) {
    }
 
    // 文件创建修改
    @Override
    public void onFileChange(File file) {
        // 触发业务
        listenerService.doSomething();
    }
 
    // 文件创建删除
    @Override
    public void onFileDelete(File file) {
    }
 
    // 目录创建
    @Override
    public void onDirectoryCreate(File directory) {
    }
 
    // 目录修改
    @Override
    public void onDirectoryChange(File directory) {
    }
 
    // 目录删除
    @Override
    public void onDirectoryDelete(File directory) {
    }
 
 
    // 轮询开始
    @Override
    public void onStart(FileAlterationObserver observer) {
    }
 
    // 轮询结束
    @Override
    public void onStop(FileAlterationObserver observer) {
    }
}

添加监听器工厂

代码语言:javascript
复制
@Component
public class FileListenerFactory {
 
    // 设置监听路径
    private final String monitorDir = "/tmp/monitorTest";
 
    // 设置轮询间隔
    private final long interval = TimeUnit.SECONDS.toMillis(1);
 
    // 自动注入业务服务
    @Autowired
    private ListenerService listenerService;
 
    public FileAlterationMonitor getMonitor() {
        // 创建过滤器
        IOFileFilter directories = FileFilterUtils.and(
                FileFilterUtils.directoryFileFilter(),
                HiddenFileFilter.VISIBLE);
        IOFileFilter files = FileFilterUtils.and(
                FileFilterUtils.fileFileFilter(),
                FileFilterUtils.suffixFileFilter(".log"));
        IOFileFilter filter = FileFilterUtils.or(directories, files);
 
        // 装配过滤器
        // FileAlterationObserver observer = new FileAlterationObserver(new File(monitorDir));
        FileAlterationObserver observer = new FileAlterationObserver(new File(monitorDir), filter);
 
        // 向监听者添加监听器,并注入业务服务
        observer.addListener(new FileListener(listenerService));
 
        // 返回监听者
		//监听多个路径
		//return new FileAlterationMonitor(interval, observer,observer,observer);
		//监听单个路径
        return new FileAlterationMonitor(interval, observer);
    }
}

测试程序

这里以SpringBoot自启动任务为例,在应用启动后开始监听目标文件夹。由于监听器在独立的线程中执行,一旦异常发生将导致线程退出,所以如果希望监听线程不中断,应在线程中捕获所有异常。

代码语言:javascript
复制
@Component
public class FileListenerRunner implements CommandLineRunner {
 
    @Autowired
    private FileListenerFactory fileListenerFactory;
 
    @Override
    public void run(String... args) throws Exception {
        // 创建监听者
        FileAlterationMonitor fileAlterationMonitor = fileListenerFactory.getMonitor();
        try {
            // do not stop this thread
            fileAlterationMonitor.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加依赖
  • 设置监听器
  • 添加监听器工厂
  • 测试程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档