zoukankan      html  css  js  c++  java
  • 监控磁盘文件变化代码

    //文件监听器

    public class FileListener extends FileAlterationListenerAdaptor{
    //日志操作
    private static final Logger logger = LoggerFactory.getLogger(FileListener.class);
    @Override
    public void onDirectoryChange(File directory) {
    System.out.println("文件目录变更了:"+directory.getAbsolutePath());
    //将目录传给文件夹扫描方法
    queryData(directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryCreate(File directory) {
    System.out.println("文件目录创建了:"+directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryDelete(File directory) {
    System.out.println("文件目录删除了:"+directory.getAbsolutePath());
    }

    @Override
    public void onFileChange(File file) {
    System.out.println("文件变更了:"+file.getAbsolutePath());
    }

    @Override
    public void onFileCreate(File file) {
    System.out.println("文件创建了:"+file.getAbsolutePath());
    }

    @Override
    public void onFileDelete(File file) {
    System.out.println("文件删除了:"+file.getAbsolutePath());
    }

    @Override
    public void onStart(FileAlterationObserver observer) {
    /* logger.info("文件系统观察者开始检查事件");*/
    System.out.println("开始监听:"+observer.getDirectory());
    }

    @Override
    public void onStop(FileAlterationObserver observer) {
    /*logger.info("文件系统观察者停止检查事件");*/
    System.out.println("停止监听:"+observer.getDirectory());
    }

    private void queryData(String path){
    //扫描出改动路径下数据
    ArrayList<String> findFileName = findFileName(path);
    //创建cxf服务
    JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
    //通过webService服务地址,创建客户端
    //String variableWSDL=variableService.selectVariable("WS_WSDLMonitor");
    Client client = dcf.createClient(Utils.returnSacnDate);
    if(0==findFileName.size()){
    findFileName.add("null");//当他为空的时候为了避免传空之报错所以我们在这设置一个null
    }
    try {
    client.invoke("returnScanDate",path,findFileName);
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println("webserver等待时间长,没有响应!");
    }
    }

    // 查找指定目录下的文件
    private ArrayList<String> findFileName(String filepath) {
    File file = new File(filepath);
    ArrayList<String> list = new ArrayList<String>();
    if (!file.exists() || !file.isDirectory()) {
    System.out.println("目录不存在");
    } else {
    File[] files = file.listFiles();
    for (int i = 0; i < files.length; i++) {
    if (files[i].isFile()) {
    if (files[i].getName().endsWith(".jpg")) {
    list.add(files[i].getName());
    }
    }
    }
    }
    return list;
    }
    }

    package cn.bocai.pc.FileMonitorMethod;

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

    /**
    * 监控类.
    *
    */
    public class FileMonitor {

    FileAlterationMonitor monitor = null;

    /**
    * 默认8分钟看一次
    * @param ob
    */
    public FileMonitor(FileAlterationObserver ob){
    // this(480000,ob);
    this(30000,ob);
    }

    /**
    * 每隔多少时候看一次,观察者
    * @param fileName
    * @param ob
    */
    public FileMonitor(long interval,FileAlterationObserver ob){
    monitor = new FileAlterationMonitor(interval,new FileAlterationObserver[]{ob});
    }

    /**
    * 添加观察者
    * @param observer
    */
    public void addObserver(FileAlterationObserver observer){
    monitor.addObserver(observer);
    }

    /**
    * 移除观察者
    * @param observer
    */
    public void removeObserver(FileAlterationObserver observer){
    monitor.removeObserver(observer);
    }

    /**
    * 获取所有观察者
    * @return
    */
    public Iterable<FileAlterationObserver> getObservers() {
    return monitor.getObservers();
    }

    /**
    * 启动监控[observer.initialize()]
    */
    public void start(){
    try {
    monitor.start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    /**
    * 停止监控[observer.destroy()]
    */
    public void stop(){
    try {
    monitor.stop();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    /**
    * [不做调用]
    * 具体的监控操作:
    * observer.checkAndNotify()
    */
    private void run(){
    monitor.run();
    }


    }

    package cn.bocai.pc.FileMonitorMethod;

    import java.io.File;
    import java.io.FileFilter;
    import org.apache.commons.io.IOCase;
    import org.apache.commons.io.monitor.FileAlterationListener;
    import org.apache.commons.io.monitor.FileAlterationObserver;

    public class FileObserver extends FileAlterationObserver{

    private static final long serialVersionUID = 3637219592248717850L;

    /**
    * 设置观查的文件对象/路径对象
    * @param directory
    */
    public FileObserver(String directory) {
    this(new File(directory),(FileFilter)null);
    }

    /**
    * 设置观查的文件路径,带文件过滤器,比如所有xml文件.
    * 这里的IOCase是设置文件比较器(排序).[根据系统,可以不用理会]
    * @param directoryName
    * @param fileFilter
    */
    public FileObserver(File fileName, FileFilter fileFilter){
    super(fileName,fileFilter,(IOCase)null);
    }

    /**
    * 监控启动时初始化方法
    * 1. 刷新本文件对象
    * 2. 得到本文件列表
    * 3. 循环初始化File实体
    * 4. 设置本文件以及其下的上下级关系
    */
    public void initialize() throws Exception {
    super.initialize();
    }

    /**
    * 停止监控
    * 默认啥都没做
    */
    public void destroy() throws Exception {
    super.destroy();
    }


    /**
    * 监测文件有没有创建,修改,删除
    * 并触发相应监听
    * 如果文件名称比原先的大,那么创建一个实体,并调用onDirectoryCreate/onFileCreate
    * 如果文件名称比原先的小,那么删除一个实体,并调用onDirectoryDelete/onFileDelete
    * 如果文件名称和原告的一样,新的文件与原先的文件进行对比,如果文件属性有改变,并调用onDirectoryChange/onFileChange,循环调用自身,可能是文件夹
    * 如果名称长度排在之后,添加文件,并调用onDirectoryCreate/onFileCreate
    * 这样就注册了所有文件的监听器
    */
    public void checkAndNotify() {
    super.checkAndNotify();
    }

    /**
    * 添加监听器
    */
    public void addListener(final FileAlterationListener listener) {
    super.addListener(listener);
    }

    /**
    * 移除监听器
    */
    public void removeListener(final FileAlterationListener listener) {
    super.removeListener(listener);
    }


    /**
    * 获取观察者对象的所有监听器
    */
    public Iterable<FileAlterationListener> getListeners() {
    return super.getListeners();
    }

    }

  • 相关阅读:
    (mysql)卸载5.0安装6.05出现“Error Nr. 2003 : Can't connect to MySQL server on 'localhost' (10061). ”的解决办法
    (Redundancy)关于服务器冗余的几个疑问,请知道的帮忙解答.
    (C#)XML文件操作3
    POJ 3635 Full Tank(最短路径变形 + 优先队列)
    POJ 2286 The Rotation Game(DFS + 迭代加深)
    POJ 1141 Brackets Sequence(区间DP + 打印路径)
    POJ 3460 Booksort(IDA* + 估价函数设计)
    POJ 2908 Quantum(BFS + 优先队列)
    NOI 1997 积木游戏(解题报告)
    NYOJ 110 决斗(区间DP + 黑书例题)
  • 原文地址:https://www.cnblogs.com/swite/p/6230593.html
Copyright © 2011-2022 走看看