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完成文件變更監控,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!