java监听指定文件或文件夹

以下为代码和注释,需要的包可以下载:文件监听工具使用示例和需要的jar包.rar (本来想设置为免积分下载,但是找了半天才知道不能自定义下载积分了)

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;

/**
 * 文件监听示例,在main方法中注明了调用方法。
 * 该类实现FileAlterationListener接口,完善“收听者”类,对收听到的文件变动做自定义处理
 */
public class FileListener implements FileAlterationListener {

/* =============================================== Override method() =============================================== */
    @Override
    public void onStart(FileAlterationObserver fileAlterationObserver) {
        //开启监听时默认调用的方法;一般不实现本方法。
    }

    @Override
    public void onDirectoryCreate(File directory) {
        /* 开启监听后发现有新目录被创建时需要做的事情 ;
         * 但实际测试过程中发现,已有目录被更改时(包括自身文件夹名称更改、下级文件夹更改、下级文件更改),也会触发本方法 ;
         */
        System.out.println("检测到[文件夹]【新增】"+directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryChange(File directory) {
        /* 开启监听后发现有目录被更改时(包括自身文件夹名称更改、下级文件夹更改、下级文件更改)需要做的事情 ;
         * 但实际测试过程中发现,更改文件夹名称时,会同时触发文件夹被删除、文件夹新增事件 ;
         */
        System.out.println("检测到[文件夹]【更改】"+directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryDelete(File directory) {
        /* 开启监听后发现有目录被删除时需要做的事情 ;
         * 但实际测试过程中发现,已有目录被更改时(包括自身文件夹名称更改、下级文件夹更改、下级文件更改),也会触发本方法
         */
        System.out.println("检测到[文件夹]【删除】"+directory.getAbsolutePath());
    }

    @Override
    public void onFileCreate(File file) {
        /* 开启监听后发现新增文件时需要做的事情 ;
         */
        System.out.println("检测到[文件]【新增】"+file.getAbsolutePath());
    }

    @Override
    public void onFileChange(File file) {
        /* 开启监听后发现有文件夹被修改时(包括文件名修改、文件内容修改)需要做的事情 ;
         */
        System.out.println("检测到[文件]【修改】"+file.getAbsolutePath());
    }

    @Override
    public void onFileDelete(File file) {
        /* 开启监听后发现有文件夹被删除时需要做的事情 ;
         */
        System.out.println("检测到[文件]【删除】"+file.getAbsolutePath());
    }

    @Override
    public void onStop(FileAlterationObserver fileAlterationObserver) {
        //监听结束时默认调用的方法;一般不实现本方法。
    }

/* =============================================== Main method() =============================================== */

    /**
     * <p>文件监听工具的主要思路:</p>
     * <p>&emsp; · 用监听器每隔指定时间轮询观察者对象,查看是否观察到了指定目录的文件或文件夹变动;</p>
     * <p>&emsp; · 将变动告知收听者对象,用来对发生的变动做出相应处理</p>
     * @param args
     */
    public static void main(String[] args) {
        //待观察的文件夹
        String listenDiretory = "E:/AAAA";
        //轮询的时间间隔,单位毫秒
        long intervalTime = 1000;

        // 创建观察者对象,主要用于观察指定文件(或文件夹)及其子文件(或子文件夹)的变化 ;
        /* 若不需要监听子文件夹,可以这样写: new FileAlterationObserver("E:/AAAA", FileFilterUtils.and(FileFilterUtils.fileFileFilter()), null);
         */
        FileAlterationObserver observer = new FileAlterationObserver(listenDiretory);

        // 创建收听者对象(即自行实现FileAlterationListener接口的类),主要用于完成文件或文件夹变化后需要做的事情 ;
        FileListener listener = new FileListener();

        // 将收听者对象添加到观察者对象中,表示将观察到的文件或文件夹变化告知收听者
        observer.addListener(listener);

        // 创建监听者对象,将用于启动后轮询监听观察者对象
        /* 第一个参数单位是毫秒,是监听的间隔;第二个参数就是绑定我们之前的观察对象。
         * 若有多个目录需要同时监听和处理,则第二个参数可以写成数组形式:new FileAlterationMonitor(10000, new FileAlterationObserver[]{observer1,observer2,observer3});
         * 若只有一个目录需要监听,则只需要传入已创建的观察对象observer:new FileAlterationMonitor(10000, observer);
         */
        FileAlterationMonitor monitor = new FileAlterationMonitor(intervalTime, observer);

        // 开始监听
        try {
            //开始监控,该方法每隔intervalTime毫秒调用一轮FileAlterationMonitor实现对象的方法,一定会默认执行onStart()和onStop()方法
            monitor.start();
            //启动程序后,在E:\AAAA文件夹下手动操作文件或文件夹即可在控制台查看打印信息。
            System.out.println("\n开始监测文件夹:"+ listenDiretory );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值