激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java實現文件變化監控

Java實現文件變化監控

2020-06-05 15:01大餅酥 JAVA教程

這篇文章主要介紹了Java實現文件變化監控的實現代碼,代碼附有注釋,分步驟介紹的非常詳細,非常不錯,具有參考借鑒價值,,需要的朋友可以參考下

一. spring配置文件:

application.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

?
1
2
3
4
5
6
7
8
9
10
11
12
<?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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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

?
1
2
3
4
5
6
7
8
9
10
11
/**
* 文件過濾器角色,擴展自java.io.FileFilter
*/
public interface FileFilter extends java.io.FileFilter {
/**
* 獲取定義的擴展名
*
* @return
*/
String[] getExtensions();
}

  2. 實現類:

FileFilterImpl.class

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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實現文件變化監控,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/Mr-kevin/archive/2016/08/18/5784443.html

延伸 · 閱讀

精彩推薦
  • JAVA教程深入剖析Java中的各種異常處理方式

    深入剖析Java中的各種異常處理方式

    這篇文章主要介紹了深入剖析Java中的各種異常處理方式,是Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    zinss269143192019-12-31
  • JAVA教程Java設計模式之Strategy模式

    Java設計模式之Strategy模式

    Strategy模式即策略模式,就是將一個算法的不同實現封裝成一個個單獨的類,這些類實現同一個接口,使用者直接使用該接口來訪問具體的算法。這個樣子...

    java教程網3562020-05-29
  • JAVA教程java生成xml格式文件的方法

    java生成xml格式文件的方法

    這篇文章主要介紹了java生成xml格式文件的方法,涉及java節點遍歷與屬性操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    manymore134202020-05-26
  • JAVA教程java.util.ArrayDeque類使用方法詳解

    java.util.ArrayDeque類使用方法詳解

    這篇文章主要介紹了java.util.ArrayDeque類使用方法,java.util.ArrayDeque類提供了可調整大小的陣列,并實現了Deque接口,感興趣的小伙伴們可以參考一下 ...

    lijiao4182020-04-14
  • JAVA教程使用Java開發實現OAuth安全認證的應用

    使用Java開發實現OAuth安全認證的應用

    這篇文章主要介紹了使用Java開發實現OAuth安全認證的應用的方法,OAuth安全認證經常出現于社交網絡API應用的相關開發中,需要的朋友可以參考下 ...

    李三紅4072020-03-04
  • JAVA教程java之super關鍵字用法實例解析

    java之super關鍵字用法實例解析

    這篇文章主要介紹了java之super關鍵字用法實例解析,較為詳細的分析了super關鍵字的用法及內存分布,需要的朋友可以參考下 ...

    shichen20143722019-12-01
  • JAVA教程java8中新的Date和Time詳解

    java8中新的Date和Time詳解

    這篇文章主要是java8中新的Date和Time,探討新Date類和Time類背后的設計原則,有所需要的小伙伴希望能幫助到你 ...

    lqh2672020-05-25
  • JAVA教程MyBatis自動生成Where語句

    MyBatis自動生成Where語句

    這篇文章主要介紹了MyBatis自動生成Where語句的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下 ...

    萬劍齊發2092020-06-03
主站蜘蛛池模板: 精品中文字幕久久久久四十五十骆 | 国产伦久视频免费观看视频 | a视频在线播放 | 日本高清在线免费 | 性盈盈盈影院 | 欧美精品色精品一区二区三区 | 青青国产在线视频 | 久久久久久免费 | 欧美日韩国产中文字幕 | 欧美乱论| 欧美一级黄色录相 | 欧美日韩一区,二区,三区,久久精品 | 黄色免费在线网站 | 国产精品视频海角社区88 | 成人视屏在线观看 | 国产精品a一 | 成人超碰 | 中文字幕 亚洲一区 | av在线在线 | 天天草天天操 | 久久久久九九九女人毛片 | 性爱免费在线视频 | 午夜视频在线 | 叉逼视频 | 欧美一级毛片一级毛片 | 欧美激情 在线播放 | 久久久麻豆 | 欧美性生活区 | 中文在线观看免费视频 | 亚洲成人中文字幕在线 | 中文字幕专区高清在线观看 | 亚洲天堂岛国片 | 久久96国产精品久久秘臀 | 成人在线免费小视频 | 欧美高清第一页 | 一级黄色在线免费观看 | 亚洲第一综合 | 国产亚洲精品视频中文字幕 | 色综合777| 在线看一区二区三区 | 久久久久九九九女人毛片 |