Java 实现对文件系统的监控

时间:2014-07-01 21:41:19   收藏:0   阅读:627

在开发中经常会用到监控文件或是目录的状态,如果你还在手写轮巡扫描文件的话,那你久out了。

1. Commons io为我们提供了一套可靠、高性能的一套文件系统监控API

1.1. 需要的jar包如下,具体版本可根据自己需要选取:

1.2. 在文件监控系统的中,首先要理解几个角色:

1.3. 代码实现步骤如下:

1.3.1. 实现监听器

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 文件监听器
 * @author leocook(leocook@163.com)
 * @version 1.0
 * @date 2014-06-30
 */
public class MyFileListener extends FileAlterationListenerAdaptor {
    private static Log log = LogFactory.getLog(MyFileListener.class);
    /**
     * 目录发生变化
     * @param directory 发生变化的目录
     */
    @Override
    public void onDirectoryChange(File directory) {
        super.onDirectoryChange(directory);
        log.info("文件夹改变:" +directory.getAbsolutePath());
    }

    /**
     * 新建目录
     * @param directory 被新建的目录
     */
    @Override
    public void onDirectoryCreate(File directory) {
        super.onDirectoryCreate(directory);
        log.info("新建目录:" +directory.getAbsolutePath());
    }

    /**
     * 删除目录
     * @param directory 被删除目录
     */
    @Override
    public void onDirectoryDelete(File directory) {
        super.onDirectoryDelete(directory);
        log.info("删除目录:" +directory.getAbsolutePath());
    }

    /**
     * 文件发生变化
     * @param file 发生变化的文件
     */
    @Override
    public void onFileChange(File file) {
        super.onFileChange(file);
        log.info("修改文件:" +file.getAbsolutePath());
    }

    /**
     * 新建文件
     * @param file 被新建的文件
     */
    @Override
    public void onFileCreate(File file) {
        super.onFileCreate(file);
        log.info("新建文件:"+file.getAbsolutePath());
    }

    /**
     * 删除文件
     * @param file 被删除的文件
     */
    @Override
    public void onFileDelete(File file) {
        super.onFileDelete(file);
        log.info("删除文件:" +file.getAbsolutePath());
    }
    
    /**
     * 检查文件开始
     * @param observer 文件观察者
     */
    @Override
    public void onStart(FileAlterationObserver observer) {
        super.onStart(observer);
//        log.info("开始检查...");
    }

    /**
     * 检查文件结束
     * @param observer 文件观察者
     */
    @Override
    public void onStop(FileAlterationObserver observer) {
        super.onStop(observer);
//        log.info("结束检查...");
    }
}

 

1.3.2. 观察者、监控器的调用

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 文件系统监测测试类
 * @author leocook(leocook@163.com)
 * @version 1.0
 * @date 2014-06-30
 */
public class Main {
    private static Log log = LogFactory.getLog(Main.class);
    
    /**
     * 测试文件系统监测
     * @param String[] args
     */
    public static void main(String[] args) {
        long interval = 1000;
        
        final String path = "/home/leocook/test";
        FileAlterationObserver observer = null;
        
        try {
            observer = new FileAlterationObserver(path, null, null);
            //添加监听器
            observer.addListener(new MyFileListener());
            
            FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
            monitor.start();
        } catch (Exception e) {
            log.error("Exception", e);
        }
    }
}

 1.4. Commons io包中对文件系统监控体系中,还有类org.apache.commons.io.monitor.FileEntry,关于它的具体用法笔者不再一一介绍。

 1.5. 参考链接

Java 实现对文件系统的监控,布布扣,bubuko.com

原文:http://www.cnblogs.com/leocook/p/java_filesystem_monitor.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!