一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - JAVA教程 - java實現文件變化監控的方法(推薦)

java實現文件變化監控的方法(推薦)

2020-06-05 15:27jingxian 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
38
39
40
41
42
43
<?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
26
27
28
29
30
31
32
33
34
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
13
<?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
35
36
37
38
39
40
41
42
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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
44
45
46
47
48
49
50
51
52
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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
44
45
46
47
48
49
50
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
12
/**
 * 文件過濾器角色,擴展自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
27
28
29
30
31
32
33
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實現文件變化監控的方法(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97菊爱网 | 精品一久久香蕉国产线看播放 | 狠狠综合视频精品播放 | 青青网| 亚洲精品免费视频 | 亚洲精品国偷拍自产在线观看蜜臀 | 疯狂伦交1一6 小说 风间由美在线 | 国产成人一区二区三区小说 | 欧美式禁忌 | 亚洲男人天堂2023 | 亚洲va欧美va国产va天堂影 | 91亚洲视频在线观看 | 色综合网天天综合色中文男男 | 国产日韩欧美视频 | 男人的影院 | 精品网站一区二区三区网站 | 久久婷婷五月综合色丁香花 | 国产精品久久久久影院色老大 | 日韩在线二区全免费 | 美女扒开奶罩让男人吃奶 | 青草热久精品视频在线观看 | 9 1 视频在线 | 国产三及| 国产91精品久久久久久久 | 免费网址在线观看入口推荐 | 久久久影院亚洲精品 | 亚洲精品成人a | 日b视频免费看 | 国内自拍成人网在线视频 | 欧美一级片在线免费观看 | 日韩视频在线免费观看 | 亚洲zooz人禽交xxxx | 手机免费在线视频 | 亚洲AV 中文字幕 国产 欧美 | 欧美视频久久 | 精品国产免费观看一区高清 | 4tube欧美高清 | 免费看一级a一片毛片 | 妹妹你插的我好爽 | 日本人和黑人一级纶理片 | 末发育xxxxx仙踪林 |