java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)
一. spring配置文件:application.xml
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
class="com.interfaces.file.monitor.FileMonitorImpl">
class="com.interfaces.file.monitor.FileObserverImpl">
class="com.interfaces.file.monitor.FileListener"/>
class="com.interfaces.file.monitor.FileFilterImpl">
二. spring上下文加載監(jiān)聽器: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();
// 啟動(dòng)目錄掃描器
scanner.start();
}
@Override
public void contextDestroyed(ServletContextEvent event) {
FileMonitor scanner = getScanner();
// 關(guān)閉目錄掃描器
scanner.stop();
super.contextDestroyed(event);
}
/**
* 獲取目錄掃描器
* @return
*/
private FileMonitor getScanner() {
return getCurrentWebApplicationContext().getBean(FileMonitor.class);
}
}
三. web工程配置文件:web.xml
contextConfigLocation
classpath:application.xml
com.web.SpringContextLoaderListener
四. 文件監(jiān)測(cè)器
1. 接口:FileMonitor.class
import org.apache.commons.io.monitor.FileAlterationObserver;
/**
* 文件監(jiān)測(cè)器角色
*/
public interface FileMonitor {
/**
* 注冊(cè)觀察器
* @param observer 觀察器
*/
void addObserver(FileAlterationObserver observer);
/**
* 刪除觀察器
* @param observer 觀察器
*/
void removeObserver(FileAlterationObserver observer);
/**
* 獲取注冊(cè)的所有觀察器
* @return 觀察器集合
*/
Iterable getObservers();
/**
* 啟動(dòng)監(jiān)測(cè)器
*/
void start();
/**
* 停止監(jiān)測(cè)器
*/
void stop();
/**
* 獲取監(jiān)測(cè)間隔時(shí)間
* @return 間隔時(shí)間(單位:毫秒)
*/
long getInterval();
}
2. 實(shí)現(xiàn)類: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;
/**
* 監(jiān)測(cè)器,監(jiān)測(cè)時(shí)間間隔,設(shè)置文件觀察器
*/
public class FileMonitorImpl implements FileMonitor{
private final FileAlterationMonitor monitor;
/**
* 監(jiān)測(cè)器線程名稱
*/
private static final String MONITOR_THREAD_NAME = "File MONITOR Daemon";
/**
* 監(jiān)測(cè)器線程Daemon標(biāo)記
*/
private static final boolean DAEMON = false;
/**
* 定義監(jiān)測(cè)時(shí)間間隔、文件觀察器
* @param interval 監(jiān)測(cè)時(shí)間間隔
* @param observer 文件觀察者
*/
FileMonitorImpl(int interval, final FileAlterationObserver observer) {
this(interval, observer,
new BasicThreadFactory.Builder().
namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build());
}
/**
* 定義監(jiān)測(cè)時(shí)間間隔、文件觀察器和線程工廠
* @param interval 監(jiān)測(cè)時(shí)間間隔
* @param observer 文件觀察器
* @param factory 線程工廠
*/
FileMonitorImpl(int interval, final FileAlterationObserver observer,
final ThreadFactory factory) {
this.monitor = new FileAlterationMonitor(interval, new FileAlterationObserver[] { observer });
monitor.setThreadFactory(factory);
}
/**
* 添加文件觀察器
* @param observer
*/
@Override
public void addObserver(FileAlterationObserver observer) {
monitor.addObserver(observer);
}
/**
* 刪除文件觀察器
* @param observer
*/
@Override
public void removeObserver(FileAlterationObserver observer) {
monitor.removeObserver(observer);
}
/**
* 獲取注冊(cè)的所有觀察器
* @return
*/
@Override
public Iterable getObservers() {
return monitor.getObservers();
}
/**
* 啟動(dòng)監(jiān)測(cè)器
*/
@Override
public void start() {
try {
monitor.start();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 停止監(jiān)測(cè)器
*/
@Override
public void stop() {
try {
monitor.stop();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取監(jiān)測(cè)時(shí)間間隔
*/
@Override
public long getInterval() {
return monitor.getInterval();
}
}
五.?文件觀察器
1. 接口:FileObserver.class
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListener;
/**
* 文件觀察器角色
*/
public interface FileObserver {
/**
* 添加監(jiān)聽器
* @param listener
*/
void addListener(final FileAlterationListener listener);
/**
* 刪除監(jiān)聽器
* @param listener
*/
void removeListener(final FileAlterationListener listener);
/**
* 獲取注冊(cè)的監(jiān)聽器
* @return
*/
Iterable getListeners();
/**
* 初始化觀察器
* @throws Exception
*/
void initialize() throws Exception;
/**
* 銷毀觀察器
* @throws Exception
*/
void destroy() throws Exception;
/**
* 獲取觀察的目錄
* @return
*/
File getDirectory();
/**
* 獲取文件過濾器
*
* @return
*/
public FileFilter getFilter();
}
2. 實(shí)現(xiàn)類: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;
/**
* 文件觀察器
*
* 當(dāng)有文件創(chuàng)建、刪除、或變更動(dòng)作時(shí),則消息通知監(jiān)聽器
*/
public class FileObserverImpl extends FileAlterationObserver implements FileObserver{
private static final long serialVersionUID = -7239227289538993830L;
/**
* 文件過濾器
*/
private final FileFilter filter;
/**
* 設(shè)置要監(jiān)聽觀察的目錄,并設(shè)置文件過濾器和監(jiān)聽器,用以觀察指定具有指定擴(kuò)展名的文件
* @param dir 觀察監(jiān)聽的目錄
* @param filter 文件過濾器
* @param listener 文件監(jiān)聽器
*/
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();
}
}
}
/**
* 添加監(jiān)聽器
*/
@Override
public void addListener(final FileAlterationListener listener) {
super.addListener(listener);
}
/**
* 移除監(jiān)聽器
*/
@Override
public void removeListener(final FileAlterationListener listener) {
super.removeListener(listener);
}
/**
* 獲取觀察者對(duì)象的所有監(jiān)聽器
*/
@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();
}
/**
* 獲取文件過濾器
* @return
*/
public FileFilter getFilter() {
return filter;
}
}
六. 文件監(jiān)聽器:FileListener.class
import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
/**
* 文件監(jiān)聽器
*/
public final class FileListener extends FileAlterationListenerAdaptor {
/**
* 文件創(chuàng)建時(shí)執(zhí)行的動(dòng)作
*/
@Override
public void onFileCreate(File file) {
// To do something
}
/**
* 文件刪除(轉(zhuǎn)移)時(shí)執(zhí)行的動(dòng)作
*/
@Override
public void onFileDelete(File file) {
// To do something
}
/**
* 文件內(nèi)容改變時(shí)執(zhí)行的動(dòng)作
*/
@Override
public void onFileChange(File file) {
// To do something
}
/**
* 開始執(zhí)行監(jiān)聽時(shí)執(zhí)行的動(dòng)作
*/
@Override
public void onStart(FileAlterationObserver observer) {
// To do something
}
/**
* 停止監(jiān)聽時(shí)執(zhí)行的動(dòng)作
*/
@Override
public void onStop(FileAlterationObserver observer) {
// To do something
}
}
七. 文件過濾器
1. 接口:FileFilter.class
/**
* 文件過濾器角色,擴(kuò)展自java.io.FileFilter
*/
public interface FileFilter extends java.io.FileFilter {
/**
* 獲取定義的擴(kuò)展名
*
* @return
*/
String[] getExtensions();
}
2. 實(shí)現(xiàn)類: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);
}
/**
* 獲取定義的擴(kuò)展名
* @return
*/
@Override
public String[] getExtensions() {
return extensions;
}
}
以上這篇java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
總結(jié)
以上是生活随笔為你收集整理的java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python现在时间 命令_Python
- 下一篇: 《Easy RL:强化学习教程》出版了!