最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)文件變化監(jiān)控

 更新時間:2016年08月18日 17:12:34   作者:大餅酥  
這篇文章主要介紹了Java實現(xiàn)文件變化監(jiān)控的實現(xiàn)代碼,代碼附有注釋,分步驟介紹的非常詳細,非常不錯,具有參考借鑒價值,,需要的朋友可以參考下

一. 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">
<!-- 文件監(jiān)測器 --> 
<bean id="monitor"
class="com.interfaces.file.monitor.FileMonitorImpl">
<constructor-arg index="0" value="10000" /> <!-- 監(jiān)測時間間隔,單位:毫秒 -->
<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"/> <!-- 文件監(jiān)聽器 -->
</bean>
<!-- 文件監(jiān)聽器 --> 
<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上下文加載監(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();
// 啟動目錄掃描器
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

<?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>

四. 文件監(jiān)測器

  1. 接口:FileMonitor.class

import org.apache.commons.io.monitor.FileAlterationObserver;
/**
* 文件監(jiān)測器角色
*/
public interface FileMonitor {
/**
* 注冊觀察器
* @param observer 觀察器
*/
void addObserver(FileAlterationObserver observer);
/**
* 刪除觀察器
* @param observer 觀察器
*/
void removeObserver(FileAlterationObserver observer); 
/**
* 獲取注冊的所有觀察器
* @return 觀察器集合
*/
Iterable<FileAlterationObserver> getObservers(); 
/**
* 啟動監(jiān)測器
*/
void start(); 
/**
* 停止監(jiān)測器
*/
void stop(); 
/**
* 獲取監(jiān)測間隔時間
* @return 間隔時間(單位:毫秒)
*/
long getInterval(); 
}

  2. 實現(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)測器,監(jiān)測時間間隔,設(shè)置文件觀察器
*/
public class FileMonitorImpl implements FileMonitor{
private final FileAlterationMonitor monitor;
/**
* 監(jiān)測器線程名稱
*/
private static final String MONITOR_THREAD_NAME = "File MONITOR Daemon";
/**
* 監(jiān)測器線程Daemon標記
*/
private static final boolean DAEMON = false;
/**
* 定義監(jiān)測時間間隔、文件觀察器
* @param interval 監(jiān)測時間間隔
* @param observer 文件觀察者
*/
FileMonitorImpl(int interval, final FileAlterationObserver observer) {
this(interval, observer, 
new BasicThreadFactory.Builder().
namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build()); 
} 
/**
* 定義監(jiān)測時間間隔、文件觀察器和線程工廠
* @param interval 監(jiān)測時間間隔
* @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();
}
/**
* 啟動監(jiān)測器
*/
@Override
public void start() {
try {
monitor.start();
} 
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 停止監(jiān)測器
*/
@Override
public void stop() {
try {
monitor.stop();
} 
catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取監(jiān)測時間間隔
*/
@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);
/**
* 獲取注冊的監(jiān)聽器
* @return
*/
Iterable<FileAlterationListener> getListeners(); 
/**
* 初始化觀察器
* @throws Exception
*/
void initialize() throws Exception; 
/**
* 銷毀觀察器
* @throws Exception
*/
void destroy() throws Exception; 
/**
* 獲取觀察的目錄
* @return
*/
File getDirectory();
/**
* 獲取文件過濾器
* 
* @return
*/
public FileFilter getFilter();
} 

  2. 實現(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;
/**
* 文件觀察器
* 
* 當有文件創(chuàng)建、刪除、或變更動作時,則消息通知監(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)聽器,用以觀察指定具有指定擴展名的文件
* @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);
}
/**
* 獲取觀察者對象的所有監(jiān)聽器
*/
@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;
} 
}

六. 文件監(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)建時執(zhí)行的動作
*/
@Override
public void onFileCreate(File file) {
// To do something
}
/**
* 文件刪除(轉(zhuǎn)移)時執(zhí)行的動作
*/
@Override
public void onFileDelete(File file) {
// To do something
}
/**
* 文件內(nèi)容改變時執(zhí)行的動作
*/
@Override
public void onFileChange(File file) {
// To do something
}
/**
* 開始執(zhí)行監(jiān)聽時執(zhí)行的動作
*/
@Override
public void onStart(FileAlterationObserver observer) {
// To do something
}
/**
* 停止監(jiān)聽時執(zhí)行的動作
*/
@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. 實現(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); 
}
/**
* 獲取定義的擴展名
* @return 
*/
@Override
public String[] getExtensions() {
return extensions;
}
}

以上所述是小編給大家介紹的Java實現(xiàn)文件變化監(jiān)控,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot中@RestControllerAdvice注解實現(xiàn)全局異常處理類

    SpringBoot中@RestControllerAdvice注解實現(xiàn)全局異常處理類

    這篇文章主要介紹了SpringBoot中@RestControllerAdvice注解全局異常處理類,springboot中使用@RestControllerAdvice注解,完成優(yōu)雅的全局異常處理類,可以針對所有異常類型先進行通用處理后再對特定異常類型進行不同的處理操作,需要的朋友可以參考下
    2024-01-01
  • Java 模擬數(shù)據(jù)庫連接池的實現(xiàn)代碼

    Java 模擬數(shù)據(jù)庫連接池的實現(xiàn)代碼

    這篇文章主要介紹了Java 模擬數(shù)據(jù)庫連接池的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 深入了解SpringBoot中@InitBinder注解的使用

    深入了解SpringBoot中@InitBinder注解的使用

    這篇文章主要介紹了深入了解SpringBoot中@InitBinder注解的使用,@InitBinder注解可以作用在被@Controller注解的類的方法上,表示為當前控制器注冊一個屬性編輯器,用于對WebDataBinder進行初始化,且只對當前的Controller有效,需要的朋友可以參考下
    2023-10-10
  • java模仿windows計算器示例

    java模仿windows計算器示例

    這篇文章主要介紹了java模仿windows計算器示例,需要的朋友可以參考下
    2014-05-05
  • Maven deploy plugin使用方式

    Maven deploy plugin使用方式

    這篇文章主要介紹了Maven deploy plugin使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring Boot 通過注解實現(xiàn)數(shù)據(jù)校驗的方法

    Spring Boot 通過注解實現(xiàn)數(shù)據(jù)校驗的方法

    這篇文章主要介紹了Spring Boot 通過注解實現(xiàn)數(shù)據(jù)校驗的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • win11?idea?shift+F6快捷鍵失效問題解決方案

    win11?idea?shift+F6快捷鍵失效問題解決方案

    這篇文章主要介紹了win11?idea?shift+F6快捷鍵失效問題,本文給大家分享最新解決方案,需要的朋友可以參考下
    2023-08-08
  • SpringBoot整合Java DL4J實現(xiàn)文本分類系統(tǒng)

    SpringBoot整合Java DL4J實現(xiàn)文本分類系統(tǒng)

    在當今信息爆炸的時代,自然語言處理領(lǐng)域中的文本分類顯得尤為重要,文本分類能夠高效地組織和管理海量的文本數(shù)據(jù),隨著互聯(lián)網(wǎng)的飛速發(fā)展,我們每天都被大量的文本信息所包圍,本文將介紹如何使用 Spring Boot 整合 Java Deeplearning4j 來構(gòu)建一個文本分類系統(tǒng)
    2024-10-10
  • java接口防重提交的處理方法

    java接口防重提交的處理方法

    本文主要介紹了java接口防重提交的處理方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • SpringCloud-Hystrix實現(xiàn)原理總結(jié)

    SpringCloud-Hystrix實現(xiàn)原理總結(jié)

    通過hystrix可以解決雪崩效應(yīng)問題,它提供了資源隔離、降級機制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-05-05

最新評論

上思县| 郸城县| 图木舒克市| 汉川市| 祁阳县| 法库县| 包头市| 黔西县| 靖宇县| 承德县| 白银市| 阿拉善右旗| 唐海县| 柯坪县| 喀喇| 昌吉市| 清新县| 灵武市| 蓬安县| 青神县| 通道| 阜阳市| 榆树市| 达州市| 东明县| 桂东县| 特克斯县| 曲松县| 利津县| 突泉县| 志丹县| 瑞昌市| 西城区| 兰考县| 桂阳县| 临安市| 汉阴县| 社会| 襄樊市| 昌都县| 海林市|