Java如何监控一个文件目录,当作出新增,删除,修改文件等操作时,第一时间对文件作出响应

前言

最近在开发制药lims的数据采集程序,因为一些硬件设备,没有和lims直连的方式,而且将数据存放到了数据库中,也不知道数据库的账号密码,只能拿到他们的备份文件或者在软件内导出excel,pdf,xml,txt等一些文件,所以想到的办法就是,让操作员将文件导出到一个指定的目录,数采程序通过监听这个目录,来判断是否是新添加的文件。

准备工作

环境

Maven 3.6.3
SpringBoot

现成的轮子

commons-io

ApacheCommons IO库包含实用程序类、流实现、文件过滤器、文件比较器、endian转换类等。

POM依赖

<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.4</version>
</dependency>

开发

用到的类

FileAlterationObserver 创建一个目录监控

FileAlterationListenerAdaptor 监听器,用来监听文件是否被操作以及,获取操作的文件

FileFilterUtils 过滤器的工具类

IOFileFilter 过滤器接口

文件过滤器和监控目录

点进去 FileAlterationObserver ,看到一个参数为 目录名称和文件过滤的构造器

	public FileAlterationObserver(String directoryName, FileFilter fileFilter) {
        this(new File(directoryName), fileFilter);
    }

通过FileFilter名字可以知道,这个就是过滤文件后缀的,所以我们先创建一个 FileFitler

创建 文件过滤

// .txt,csv
this._type = ".txt";
IOFileFilter fileFilter = FileFilterUtils.and(
	FileFilterUtils.fileFileFilter(),
    FileFilterUtils.suffixFileFilter(this._type));

创建目录监控

FileAlterationObserver _ob = new FileAlterationObserver(this.path,fileFilter);

添加监听器

实现 FileAlterationListenerAdaptor类,然后会继承一些方法,然后使用FileAlterationObserver的addlistener方法添加进去这个就好

如下代码:

_ob.addListener(new FileAlterationListenerAdaptor(){
            @Override
            public void onStart(FileAlterationObserver observer) {
                log.debug("{} 已开启监控文件夹:{}",_name,path);
            }
            @Override
            public void onDirectoryCreate(File directory) {
                logger.info("有新文件夹生成:{}",directory.getName());
            }
            @Override
            public void onDirectoryChange(File directory) {
                logger.info("有文件夹内容发生变化:{}",directory.getName());
            }
            @Override
            public void onDirectoryDelete(File directory) {
                logger.info("有文件夹被删除:{}",directory.getName());
            }
            @Override
            public void onFileCreate(File file){
				logger.info("有新增文件:{}",file.getName());
            }
            @Override
            public void onFileChange(File file){
                logger.info("有文件被修改:{}",file.getName());
            }
            @Override
            public void onFileDelete(File file){
                logger.info("有文件被删除:{}",file.getName());
            }
            @Override
            public void onStop(FileAlterationObserver observer){
                log.debug("{}:已停止监控文件夹:{}",_name,path);
            }
        });

启动监听

工具的默认监听时间是1秒,也就是1000ms,在FileAlterationMonitor创建的时候,可以设置监听时间

// 构造器

// long interval 就是监听时间参数
public FileAlterationMonitor() {
        this(10000L);
    }
   
public FileAlterationMonitor(long interval, FileAlterationObserver... observers) {
        this(interval);
        if (observers != null) {
            FileAlterationObserver[] arr$ = observers;
            int len$ = observers.length;

            for(int i$ = 0; i$ < len$; ++i$) {
                FileAlterationObserver observer = arr$[i$];
                this.addObserver(observer);
            }
        }
// 如果想每次监听到的时间变长点,就把interval改成其他时间就行,单位是毫秒
FileAlterationMonitor _monitor = new FileAlterationMonitor(1000, _ob);
// 启动
_monitor.start();

结尾

没有结尾。。。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值