实时监控文件夹及文件的变化

点击下载commons io


测试代码一

package com.jdy.test;

import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import com.jdy.listener.FileAlterationListenerImpl;

public class FileTest {

    public static void main(String[] args) {
        // 创建文件监听器
        FileAlterationListener listener = new FileAlterationListenerImpl();

        // 创建文件过滤器
        IOFileFilter directories = FileFilterUtils.and(
                                        FileFilterUtils.directoryFileFilter(), 
                                        HiddenFileFilter.VISIBLE);

        IOFileFilter files = FileFilterUtils.and(
                                FileFilterUtils.fileFileFilter(), 
                                FileFilterUtils.suffixFileFilter(".txt"));

        IOFileFilter fileFilter = FileFilterUtils.or(directories, files);

        // 创建文件观察器
        String directory = "D:/folder";
        FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter);
        observer.addListener(listener);

        // 创建文件监控器
        long interval = 1000l;
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
        monitor.addObserver(observer);

        try {
            monitor.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

        //主线程循环打印100次
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " --> "+ i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

测试代码二

package com.jdy.test;

import java.io.FileFilter;

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

import com.jdy.filter.FileFilterImpl;
import com.jdy.listener.FileAlterationListenerImpl;

public class FileTest2 {

    public static void main(String[] args) {
        // 创建文件监听器
        FileAlterationListener listener = new FileAlterationListenerImpl();

        // 创建文件观察器
        String directory = "D:/folder";
        FileFilter fileFilter = new FileFilterImpl();
        FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter);
        observer.addListener(listener);

        // 创建文件监控器
        long interval = 1000l;
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
        monitor.addObserver(observer);

        try {
            monitor.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

        //主线程循环打印100次
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " --> "+ i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

自定义监听器

package com.jdy.listener;

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class FileAlterationListenerImpl extends FileAlterationListenerAdaptor {

    @Override
    public void onDirectoryChange(File directory) {
        System.out.println(directory.getName() + " ---> onDirectoryChange");
        super.onDirectoryChange(directory);
    }

    @Override
    public void onDirectoryCreate(File directory) {
        System.out.println(directory.getName() + " ---> onDirectoryCreate");
        super.onDirectoryCreate(directory);
    }

    @Override
    public void onDirectoryDelete(File directory) {
        System.out.println(directory.getName() + " ---> onDirectoryDelete");
        super.onDirectoryDelete(directory);
    }

    @Override
    public void onFileChange(File file) {
        System.out.println(file.getName() + " ---> onFileChange");
        super.onFileChange(file);
    }

    @Override
    public void onFileCreate(File file) {
        System.out.println(file.getName() + " ---> onFileCreate");
        super.onFileCreate(file);
    }

    @Override
    public void onFileDelete(File file) {
        System.out.println(file.getName() + " ---> onFileDelete");
        super.onFileDelete(file);
    }

    @Override
    public void onStart(FileAlterationObserver observer) {
        System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStart");
        super.onStart(observer);
    }

    @Override
    public void onStop(FileAlterationObserver observer) {
        System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStop");
        super.onStop(observer);
    }

}

自定义过滤器

package com.jdy.filter;

import java.io.File;

import org.apache.commons.io.filefilter.FileFileFilter;

public class FileFilterImpl extends FileFileFilter {

    private static final long serialVersionUID = 1L;

    @Override
    public boolean accept(File file) {
        System.out.println(file.getName() + "accept");
        return super.accept(file);
    }
}

打印结果

main --> 0
D:\folder ---> onStart
D:\folder ---> onStop
main --> 1
D:\folder ---> onStart
D:\folder ---> onStop
main --> 2
D:\folder ---> onStart
D:\folder ---> onStop
main --> 3
D:\folder ---> onStart
11.txt ---> onFileCreate
22.txt ---> onFileCreate
33.txt ---> onFileCreate
D:\folder ---> onStop
main --> 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值