您好,登錄后才能下訂單哦!
一、commons-io方法
1、使用Commons-io的monitor下的相關類可以處理對文件進行監控,它采用的是觀察者模式來實現的
2、引入commons-io包,需要2.0以上。
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
3、編寫繼承FileAlterationListenerAdaptor的類FileListener。
import java.io.File; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.apache.log4j.Logger; /** * 文件變化監聽器 * 在Apache的Commons-IO中有關于文件的監控功能的代碼. 文件監控的原理如下: * 由文件監控類FileAlterationMonitor中的線程不停的掃描文件觀察器FileAlterationObserver, * 如果有文件的變化,則根據相關的文件比較器,判斷文件時新增,還是刪除,還是更改。(默認為1000毫秒執行一次掃描) */ public class FileListener extends FileAlterationListenerAdaptor { private Logger log = Logger.getLogger(FileListener.class); /** * 文件創建執行 */ public void onFileCreate(File file) { log.info("[新建]:" + file.getAbsolutePath()); } /** * 文件創建修改 */ public void onFileChange(File file) { log.info("[修改]:" + file.getAbsolutePath()); } /** * 文件刪除 */ public void onFileDelete(File file) { log.info("[刪除]:" + file.getAbsolutePath()); } /** * 目錄創建 */ public void onDirectoryCreate(File directory) { log.info("[新建]:" + directory.getAbsolutePath()); } /** * 目錄修改 */ public void onDirectoryChange(File directory) { log.info("[修改]:" + directory.getAbsolutePath()); } /** * 目錄刪除 */ public void onDirectoryDelete(File directory) { log.info("[刪除]:" + directory.getAbsolutePath()); } public void onStart(FileAlterationObserver observer) { // TODO Auto-generated method stub super.onStart(observer); } public void onStop(FileAlterationObserver observer) { // TODO Auto-generated method stub super.onStop(observer); } }
4、實現main方法
public static void main(String[] args) throws Exception{ // 監控目錄 String rootDir = "D:\\apache-tomcat-7.0.78"; // 輪詢間隔 5 秒 long interval = TimeUnit.SECONDS.toMillis(1); // 創建過濾器 IOFileFilter directories = FileFilterUtils.and( FileFilterUtils.directoryFileFilter(), HiddenFileFilter.VISIBLE); IOFileFilter files = FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".txt")); IOFileFilter filter = FileFilterUtils.or(directories, files); // 使用過濾器 FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter); //不使用過濾器 //FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir)); observer.addListener(new FileListener()); //創建文件變化監聽器 FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer); // 開始監控 monitor.start(); }
二、使用JDK7提供的WatchService
public static void main(String[] a) { final Path path = Paths.get("D:\\apache-tomcat-7.0.78"); try (WatchService watchService = FileSystems.getDefault().newWatchService()) { //給path路徑加上文件觀察服務 path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE); while (true) { final WatchKey key = watchService.take(); for (WatchEvent<?> watchEvent : key.pollEvents()) { final WatchEvent.Kind<?> kind = watchEvent.kind(); if (kind == StandardWatchEventKinds.OVERFLOW) { continue; } //創建事件 if (kind == StandardWatchEventKinds.ENTRY_CREATE) { System.out.println("[新建]"); } //修改事件 if (kind == StandardWatchEventKinds.ENTRY_MODIFY) { System.out.println("修改]"); } //刪除事件 if (kind == StandardWatchEventKinds.ENTRY_DELETE) { System.out.println("[刪除]"); } // get the filename for the event final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent; final Path filename = watchEventPath.context(); // print it out System.out.println(kind + " -> " + filename); } boolean valid = key.reset(); if (!valid) { break; } } } catch (IOException | InterruptedException ex) { System.err.println(ex); } }
三、以上方法都可以實現對相應文件夾得文件監控,但是在使用jdk7提供的API時,會出現些許問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。