栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现文件变化监控的方法(推荐)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现文件变化监控的方法(推荐)

一. spring配置文件:application.xml



  
    
  
  
       
     
      
  
      
  
    
          
       
       
  
  
    
  
  
      
      
    
        
  

二. spring上下文加载监听器:SpringContextLoaderListener.class

import javax.servlet.ServletContextEvent;

import org.springframework.web.context.ContextLoaderListener;

public class SpringContextLoaderListener extends ContextLoaderListener{
  
  @Override
  public void contextInitialized(ServletContextEvent event) {
    super.contextInitialized(event);
    
    FileMonitor scanner = getScanner();
    
    // 启动目录扫描器
    scanner.start();
  }
  
  @Override
  public void contextDestroyed(ServletContextEvent event) {
    FileMonitor scanner = getScanner();
    
    // 关闭目录扫描器
    scanner.stop();
    
    super.contextDestroyed(event);
  }
  
  
  private FileMonitor getScanner() {
    return getCurrentWebApplicationContext().getBean(FileMonitor.class);
  }
}

三. web工程配置文件:web.xml



 
  contextConfigLocation
  
      classpath:application.xml
  
 
 
   com.web.SpringContextLoaderListener
 
  

四. 文件监测器

1. 接口:FileMonitor.class

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


public interface FileMonitor {

  
  void addObserver(FileAlterationObserver observer);
    
  
  void removeObserver(FileAlterationObserver observer);  
  
  
  Iterable getObservers();  
  
  
  void start();  
  
  
  void stop();  
  
  
  long getInterval();  
  
}

2. 实现类:FileMonitorImpl.class

import java.util.concurrent.ThreadFactory;

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;


public class FileMonitorImpl implements FileMonitor{

  private final FileAlterationMonitor monitor;
  
  
  private static final String MONITOR_THREAD_NAME = "File MonITOR Daemon";
    
  
  private static final boolean DAEMON = false;
  
  
  
  FileMonitorImpl(int interval, final FileAlterationObserver observer) {
    this(interval, observer, 
      new BasicThreadFactory.Builder().
   namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build());    
  }  
  
  
  FileMonitorImpl(int interval, final FileAlterationObserver observer, 
final ThreadFactory factory) {    
    this.monitor = new FileAlterationMonitor(interval, new FileAlterationObserver[] { observer });
    monitor.setThreadFactory(factory);    
  } 
  
  
  @Override
  public void addObserver(FileAlterationObserver observer) {
    monitor.addObserver(observer);
  }

  
  @Override
  public void removeObserver(FileAlterationObserver observer) {
    monitor.removeObserver(observer);
  }

  
  @Override
  public Iterable getObservers() {
    return monitor.getObservers();
  }

  
  @Override
  public void start() {
    try {
      monitor.start();
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  
  @Override
  public void stop() {
    try {
      monitor.stop();
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  
  @Override
  public long getInterval() {
    return monitor.getInterval(); 
  }

}

五. 文件观察器

1. 接口:FileObserver.class

import java.io.File;

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


public interface FileObserver {
  
  
  void addListener(final FileAlterationListener listener);
    
  
  void removeListener(final FileAlterationListener listener);
    
  
  Iterable getListeners();  
  
  
  void initialize() throws Exception;  
  
  
  void destroy() throws Exception;  
  
  
  File getDirectory();
  
  
  public FileFilter getFilter();
}

2. 实现类:FileObserverImpl.class

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;


public class FileObserverImpl extends FileAlterationObserver implements FileObserver{
  
  private static final long serialVersionUID = -7239227289538993830L;
  
  
  private final FileFilter filter;
    
  
  public FileObserverImpl(String dir, final FileFilter filter, 
    FileAlterationListener listener) {
    super(dir, filter, (IOCase) null);
    addListener(listener); 
    
    this.filter = filter;
    
    File directory = new File(dir);
    
    // 如果目录不存在
    if(!directory.exists()) {
      try {
 FileUtils.forceMkdir(directory);
      } 
      catch (IOException e) {
 e.printStackTrace();
      }
    }
    // 如果存在的是文件
    else if(directory.exists() && directory.isFile()) {
      try {
 FileUtils.forceDelete(directory);
 FileUtils.forceMkdir(directory);
      } 
      catch (IOException e) {
 e.printStackTrace();
      }
    }
  }
  
  
  @Override
  public void addListener(final FileAlterationListener listener) {
    super.addListener(listener);
  }

  
  @Override
  public void removeListener(final FileAlterationListener listener) {
    super.removeListener(listener);
  }

  
  @Override
  public Iterable getListeners() {
    return super.getListeners();
  }
  
  
  @Override
  public void initialize() throws Exception {
    super.initialize();
  }

  
  @Override
  public void destroy() throws Exception {
    super.destroy();
  }
  
  
  @Override
  public File getDirectory() {
    return super.getDirectory();
  }

  
  public FileFilter getFilter() {
    return filter;
  }  
}

六. 文件监听器:FileListener.class

import java.io.File;

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


public final class FileListener extends FileAlterationListenerAdaptor {
  
  
  @Override
  public void onFileCreate(File file) {
    // To do something
  }
  
  
  @Override
  public void onFileDelete(File file) {
    // To do something
  }
  
  
  @Override
  public void onFileChange(File file) {
    // To do something
  }
  
  
  @Override
  public void onStart(FileAlterationObserver observer) {
    // To do something
  }
  
  
  @Override
  public void onStop(FileAlterationObserver observer) {
    // To do something
  }
}

七. 文件过滤器

1. 接口:FileFilter.class


public interface FileFilter extends java.io.FileFilter {
  
  
  String[] getExtensions();
}

2. 实现类:FileFilterImpl.class

import java.io.File;

import org.apache.commons.io.FilenameUtils;


public class FileFilterImpl implements FileFilter{
  
  private String[] extensions;
  
  public FileFilterImpl(String... extensions) {
    this.extensions = extensions;
  }
  
  
  @Override
  public boolean accept(File pathname) {
    return FilenameUtils.isExtension(pathname.getName(), extensions); 
  }

  
  @Override
  public String[] getExtensions() {
    return extensions;
  }

}

以上这篇java实现文件变化监控的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/149389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号