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

java實現文件變化監控,java實現監控

編輯:JAVA綜合教程

java實現文件變化監控,java實現監控


一. spring配置文件:application.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr" 5 xmlns:jaxrs="http://cxf.apache.org/jaxrs" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 7 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 10 http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd 11 http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> 12 13 <!-- 文件監測器 --> 14 <bean id="monitor" 15 class="com.interfaces.file.monitor.FileMonitorImpl"> 16 17 <constructor-arg index="0" value="10000" /> <!-- 監測時間間隔,單位:毫秒 --> 18 <constructor-arg index="1" ref="observer" /> <!-- 文件觀察器 --> 19 </bean> 20 21 <!-- 文件觀察器 --> 22 <bean id="observer" 23 class="com.interfaces.file.monitor.FileObserverImpl"> 24 25 <constructor-arg index="0" value="D:\\UploadDir"/> <!-- 觀察的目錄 --> 26 <constructor-arg index="1" ref="filter"/> <!-- 文件過濾器--> 27 <constructor-arg index="2" ref="listener"/> <!-- 文件監聽器 --> 28 </bean> 29 30 <!-- 文件監聽器 --> 31 <bean id="listener" 32 class="com.interfaces.file.monitor.FileListener"/> 33 34 <!-- 文件過濾器 --> 35 <bean id="filter" 36 class="com.interfaces.file.monitor.FileFilterImpl"> 37 <!-- 38 指定文件擴展名,只有指定的擴展名文件會被處理。 39 不同的擴展名間以 "," 間隔,如:xml,txt,bak 40 --> 41 <constructor-arg index="0" value="xml"/> 42 </bean> 43 </beans> View Code

 

二. spring上下文加載監聽器:SpringContextLoaderListener.class

1 import javax.servlet.ServletContextEvent; 2 3 import org.springframework.web.context.ContextLoaderListener; 4 5 public class SpringContextLoaderListener extends ContextLoaderListener{ 6 7 @Override 8 public void contextInitialized(ServletContextEvent event) { 9 super.contextInitialized(event); 10 11 FileMonitor scanner = getScanner(); 12 13 // 啟動目錄掃描器 14 scanner.start(); 15 } 16 17 @Override 18 public void contextDestroyed(ServletContextEvent event) { 19 FileMonitor scanner = getScanner(); 20 21 // 關閉目錄掃描器 22 scanner.stop(); 23 24 super.contextDestroyed(event); 25 } 26 27 /** 28 * 獲取目錄掃描器 29 * @return 30 */ 31 private FileMonitor getScanner() { 32 return getCurrentWebApplicationContext().getBean(FileMonitor.class); 33 } 34 } View Code

 

三. web工程配置文件:web.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <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"> 3 <context-param> 4 <param-name>contextConfigLocation</param-name> 5 <param-value> 6 classpath:application.xml 7 </param-value> 8 </context-param> 9 <listener> 10 <listener-class>com.web.SpringContextLoaderListener</listener-class> 11 </listener> 12 13 </web-app> View Code


四. 文件監測器

  1. 接口:FileMonitor.class

1 import org.apache.commons.io.monitor.FileAlterationObserver; 2 3 /** 4 * 文件監測器角色 5 */ 6 public interface FileMonitor { 7 8 /** 9 * 注冊觀察器 10 * @param observer 觀察器 11 */ 12 void addObserver(FileAlterationObserver observer); 13 14 /** 15 * 刪除觀察器 16 * @param observer 觀察器 17 */ 18 void removeObserver(FileAlterationObserver observer); 19 20 /** 21 * 獲取注冊的所有觀察器 22 * @return 觀察器集合 23 */ 24 Iterable<FileAlterationObserver> getObservers(); 25 26 /** 27 * 啟動監測器 28 */ 29 void start(); 30 31 /** 32 * 停止監測器 33 */ 34 void stop(); 35 36 /** 37 * 獲取監測間隔時間 38 * @return 間隔時間(單位:毫秒) 39 */ 40 long getInterval(); 41 42 } View Code


  2. 實現類:FileMonitorImpl.class

1 import java.util.concurrent.ThreadFactory; 2 3 import org.apache.commons.io.monitor.FileAlterationMonitor; 4 import org.apache.commons.io.monitor.FileAlterationObserver; 5 import org.apache.commons.lang3.concurrent.BasicThreadFactory; 6 7 /** 8 * 監測器,監測時間間隔,設置文件觀察器 9 */ 10 public class FileMonitorImpl implements FileMonitor{ 11 12 private final FileAlterationMonitor monitor; 13 14 /** 15 * 監測器線程名稱 16 */ 17 private static final String MONITOR_THREAD_NAME = "File MONITOR Daemon"; 18 19 /** 20 * 監測器線程Daemon標記 21 */ 22 private static final boolean DAEMON = false; 23 24 25 /** 26 * 定義監測時間間隔、文件觀察器 27 * @param interval 監測時間間隔 28 * @param observer 文件觀察者 29 */ 30 FileMonitorImpl(int interval, final FileAlterationObserver observer) { 31 this(interval, observer, 32 new BasicThreadFactory.Builder(). 33 namingPattern(MONITOR_THREAD_NAME).daemon(DAEMON).build()); 34 } 35 36 /** 37 * 定義監測時間間隔、文件觀察器和線程工廠 38 * @param interval 監測時間間隔 39 * @param observer 文件觀察器 40 * @param factory 線程工廠 41 */ 42 FileMonitorImpl(int interval, final FileAlterationObserver observer, 43 final ThreadFactory factory) { 44 this.monitor = new FileAlterationMonitor(interval, new FileAlterationObserver[] { observer }); 45 monitor.setThreadFactory(factory); 46 } 47 48 /** 49 * 添加文件觀察器 50 * @param observer 51 */ 52 @Override 53 public void addObserver(FileAlterationObserver observer) { 54 monitor.addObserver(observer); 55 } 56 57 /** 58 * 刪除文件觀察器 59 * @param observer 60 */ 61 @Override 62 public void removeObserver(FileAlterationObserver observer) { 63 monitor.removeObserver(observer); 64 } 65 66 /** 67 * 獲取注冊的所有觀察器 68 * @return 69 */ 70 @Override 71 public Iterable<FileAlterationObserver> getObservers() { 72 return monitor.getObservers(); 73 } 74 75 /** 76 * 啟動監測器 77 */ 78 @Override 79 public void start() { 80 try { 81 monitor.start(); 82 } 83 catch (Exception e) { 84 e.printStackTrace(); 85 } 86 } 87 88 /** 89 * 停止監測器 90 */ 91 @Override 92 public void stop() { 93 try { 94 monitor.stop(); 95 } 96 catch (Exception e) { 97 e.printStackTrace(); 98 } 99 } 100 101 /** 102 * 獲取監測時間間隔 103 */ 104 @Override 105 public long getInterval() { 106 return monitor.getInterval(); 107 } 108 109 } View Code


五. 文件觀察器

  1. 接口:FileObserver.class

1 import java.io.File; 2 3 import org.apache.commons.io.monitor.FileAlterationListener; 4 5 /** 6 * 文件觀察器角色 7 */ 8 public interface FileObserver { 9 10 /** 11 * 添加監聽器 12 * @param listener 13 */ 14 void addListener(final FileAlterationListener listener); 15 16 /** 17 * 刪除監聽器 18 * @param listener 19 */ 20 void removeListener(final FileAlterationListener listener); 21 22 /** 23 * 獲取注冊的監聽器 24 * @return 25 */ 26 Iterable<FileAlterationListener> getListeners(); 27 28 /** 29 * 初始化觀察器 30 * @throws Exception 31 */ 32 void initialize() throws Exception; 33 34 /** 35 * 銷毀觀察器 36 * @throws Exception 37 */ 38 void destroy() throws Exception; 39 40 /** 41 * 獲取觀察的目錄 42 * @return 43 */ 44 File getDirectory(); 45 46 /** 47 * 獲取文件過濾器 48 * 49 * @return 50 */ 51 public FileFilter getFilter(); 52 } View Code

  

  2. 實現類:FileObserverImpl.class

1 import java.io.File; 2 import java.io.IOException; 3 4 import org.apache.commons.io.FileUtils; 5 import org.apache.commons.io.IOCase; 6 import org.apache.commons.io.monitor.FileAlterationListener; 7 import org.apache.commons.io.monitor.FileAlterationObserver; 8 9 /** 10 * 文件觀察器 11 * 12 * 當有文件創建、刪除、或變更動作時,則消息通知監聽器 13 */ 14 public class FileObserverImpl extends FileAlterationObserver implements FileObserver{ 15 16 private static final long serialVersionUID = -7239227289538993830L; 17 18 /** 19 * 文件過濾器 20 */ 21 private final FileFilter filter; 22 23 /** 24 * 設置要監聽觀察的目錄,並設置文件過濾器和監聽器,用以觀察指定具有指定擴展名的文件 25 * @param dir 觀察監聽的目錄 26 * @param filter 文件過濾器 27 * @param listener 文件監聽器 28 */ 29 public FileObserverImpl(String dir, final FileFilter filter, 30 FileAlterationListener listener) { 31 super(dir, filter, (IOCase) null); 32 addListener(listener); 33 34 this.filter = filter; 35 36 File directory = new File(dir); 37 38 // 如果目錄不存在 39 if(!directory.exists()) { 40 try { 41 FileUtils.forceMkdir(directory); 42 } 43 catch (IOException e) { 44 e.printStackTrace(); 45 } 46 } 47 // 如果存在的是文件 48 else if(directory.exists() && directory.isFile()) { 49 try { 50 FileUtils.forceDelete(directory); 51 FileUtils.forceMkdir(directory); 52 } 53 catch (IOException e) { 54 e.printStackTrace(); 55 } 56 } 57 } 58 59 /** 60 * 添加監聽器 61 */ 62 @Override 63 public void addListener(final FileAlterationListener listener) { 64 super.addListener(listener); 65 } 66 67 /** 68 * 移除監聽器 69 */ 70 @Override 71 public void removeListener(final FileAlterationListener listener) { 72 super.removeListener(listener); 73 } 74 75 /** 76 * 獲取觀察者對象的所有監聽器 77 */ 78 @Override 79 public Iterable<FileAlterationListener> getListeners() { 80 return super.getListeners(); 81 } 82 83 /** 84 * 初始化文件觀察者 85 */ 86 @Override 87 public void initialize() throws Exception { 88 super.initialize(); 89 } 90 91 /** 92 * 銷毀文件觀察者 93 */ 94 @Override 95 public void destroy() throws Exception { 96 super.destroy(); 97 } 98 99 /** 100 * 獲取所觀察的目錄 101 */ 102 @Override 103 public File getDirectory() { 104 return super.getDirectory(); 105 } 106 107 /** 108 * 獲取文件過濾器 109 * @return 110 */ 111 public FileFilter getFilter() { 112 return filter; 113 } 114 } View Code


六. 文件監聽器:FileListener.class

1 import java.io.File; 2 3 import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; 4 import org.apache.commons.io.monitor.FileAlterationObserver; 5 6 /** 7 * 文件監聽器 8 */ 9 public final class FileListener extends FileAlterationListenerAdaptor { 10 11 /** 12 * 文件創建時執行的動作 13 */ 14 @Override 15 public void onFileCreate(File file) { 16 // To do something 17 } 18 19 /** 20 * 文件刪除(轉移)時執行的動作 21 */ 22 @Override 23 public void onFileDelete(File file) { 24 // To do something 25 } 26 27 /** 28 * 文件內容改變時執行的動作 29 */ 30 @Override 31 public void onFileChange(File file) { 32 // To do something 33 } 34 35 /** 36 * 開始執行監聽時執行的動作 37 */ 38 @Override 39 public void onStart(FileAlterationObserver observer) { 40 // To do something 41 } 42 43 /** 44 * 停止監聽時執行的動作 45 */ 46 @Override 47 public void onStop(FileAlterationObserver observer) { 48 // To do something 49 } 50 } View Code


七. 文件過濾器

  1. 接口:FileFilter.class

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

  

  2. 實現類:FileFilterImpl.class

1 import java.io.File; 2 3 import org.apache.commons.io.FilenameUtils; 4 5 /** 6 * 文件過濾器 7 */ 8 public class FileFilterImpl implements FileFilter{ 9 10 private String[] extensions; 11 12 public FileFilterImpl(String... extensions) { 13 this.extensions = extensions; 14 } 15 16 /** 17 * 是否接受該文件 18 */ 19 @Override 20 public boolean accept(File pathname) { 21 return FilenameUtils.isExtension(pathname.getName(), extensions); 22 } 23 24 /** 25 * 獲取定義的擴展名 26 * @return 27 */ 28 @Override 29 public String[] getExtensions() { 30 return extensions; 31 } 32 33 } View Code

 

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