程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成文件變更監控

Java完成文件變更監控

編輯:關於JAVA

Java完成文件變更監控。本站提示廣大學習愛好者:(Java完成文件變更監控)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成文件變更監控正文


一. spring設置裝備擺設文件:

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
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">
<!-- 文件監測器 --> 
<bean id="monitor"
class="com.interfaces.file.monitor.FileMonitorImpl">
<constructor-arg index="0" value="10000" /> <!-- 監測時光距離,單元:毫秒 -->
<constructor-arg index="1" ref="observer" /> <!-- 文件不雅察器 -->
</bean> 
<!-- 文件不雅察器 --> 
<bean id="observer"
class="com.interfaces.file.monitor.FileObserverImpl">
<constructor-arg index="0" value="D:\\UploadDir"/> <!-- 不雅察的目次 -->
<constructor-arg index="1" ref="filter"/> <!-- 文件過濾器-->
<constructor-arg index="2" ref="listener"/> <!-- 文件監聽器 -->
</bean>
<!-- 文件監聽器 --> 
<bean id="listener"
class="com.interfaces.file.monitor.FileListener"/>
<!-- 文件過濾器 --> 
<bean id="filter"
class="com.interfaces.file.monitor.FileFilterImpl"> 
<!-- 
指定文件擴大名,只要指定的擴大名文件會被處置。
分歧的擴大名間以 "," 距離,如:xml,txt,bak 
-->
<constructor-arg index="0" value="xml"/> 
</bean>
</beans>

二. 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);
}
/**
* 獲得目次掃描器
* @return
*/
private FileMonitor getScanner() {
return getCurrentWebApplicationContext().getBean(FileMonitor.class);
}
}

三. web工程設置裝備擺設文件:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.4">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:application.xml
</param-value>
</context-param>
<listener>
<listener-class>com.web.SpringContextLoaderListener</listener-class>
</listener>
</web-app>

四. 文件監測器

  1. 接口:FileMonitor.class

import org.apache.commons.io.monitor.FileAlterationObserver;
/**
* 文件監測器腳色
*/
public interface FileMonitor {
/**
* 注冊不雅察器
* @param observer 不雅察器
*/
void addObserver(FileAlterationObserver observer);
/**
* 刪除不雅察器
* @param observer 不雅察器
*/
void removeObserver(FileAlterationObserver observer); 
/**
* 獲得注冊的一切不雅察器
* @return 不雅察器聚集
*/
Iterable<FileAlterationObserver> getObservers(); 
/**
* 啟動監測器
*/
void start(); 
/**
* 停滯監測器
*/
void stop(); 
/**
* 獲得監測距離時光
* @return 距離時光(單元:毫秒)
*/
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";
/**
* 監測器線程Daemon標志
*/
private static final boolean DAEMON = false;
/**
* 界說監測時光距離、文件不雅察器
* @param interval 監測時光距離
* @param observer 文件不雅察者
*/
FileMonitorImpl(int interval, final FileAlterationObserver observer) {
this(interval, observer, 
new BasicThreadFactory.Builder().
namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build()); 
} 
/**
* 界說監測時光距離、文件不雅察器和線程工場
* @param interval 監測時光距離
* @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);
}
/**
* 獲得注冊的一切不雅察器
* @return
*/
@Override
public Iterable<FileAlterationObserver> 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 {
/**
* 添加監聽器
* @param listener
*/
void addListener(final FileAlterationListener listener);
/**
* 刪除監聽器
* @param listener
*/
void removeListener(final FileAlterationListener listener);
/**
* 獲得注冊的監聽器
* @return
*/
Iterable<FileAlterationListener> getListeners(); 
/**
* 初始化不雅察器
* @throws Exception
*/
void initialize() throws Exception; 
/**
* 燒毀不雅察器
* @throws Exception
*/
void destroy() throws Exception; 
/**
* 獲得不雅察的目次
* @return
*/
File getDirectory();
/**
* 獲得文件過濾器
* 
* @return
*/
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;
/**
* 設置要監聽不雅察的目次,並設置文件過濾器和監聽器,用以不雅察指定具有指定擴大名的文件
* @param dir 不雅察監聽的目次
* @param filter 文件過濾器
* @param listener 文件監聽器
*/
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<FileAlterationListener> 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;
} 
}

六. 文件監聽器:

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

/**
* 文件過濾器腳色,擴大自java.io.FileFilter
*/
public interface FileFilter extends java.io.FileFilter {
/**
* 獲得界說的擴大名
* 
* @return
*/
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); 
}
/**
* 獲得界說的擴大名
* @return 
*/
@Override
public String[] getExtensions() {
return extensions;
}
}

以上所述是小編給年夜家引見的Java完成文件變更監控,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved