Java 如何監控檔案目錄的變化 【轉】
imp
ort java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* <p>
* Description:監控某個檔案路徑下的變化
* </p>
*
* @author imasmallbird
* @version $Revision 1.1 $ 2009-10-10 下午01:14:26
*/
public class DirMonitor implements Runnable {
/**
* just for test
*
* @param args
*/
public static void main(String[] args) {
DirMonitor dirMonitor = new DirMonitor("D:\\temp", 5);
dirMonitor.run();
}
/**
* 監控的檔案路徑
*/
private String dir;
/**
* 原有檔案資訊
*/
private Map<String, String> oldDirFileMap;
/**
* 掃描間隔時間以秒為單位
*/
private int period;
/**
* 初始化相關資料
*/
public DirMonitor(String dir, int period) {
this.dir = dir;
this.period = period;
this.oldDirFileMap = new HashMap<String, String>();
}
/**
* 展示原有檔案
*/
private void displayNowFile() {
System.out.println(dir + "路徑原有檔案目錄如下:\n");
Set set = oldDirFileMap.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(oldDirFileMap.get(iterator.next()));
}
System.out.println("========================");
}
/**
* 得到增加的檔案及資料夾,並增加到已有的檔案資訊中
*/
private void getAddedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = nowDirFileMap.keySet().iterator(); iterator.hasNext();) {
String key = iterator.next();
if (null == oldDirFileMap.get(key)) {
oldDirFileMap.put(key, nowDirFileMap.get(key));
System.out.println("新增" + nowDirFileMap.get(key));
}
}
}
/**
* 得到刪除的檔案及資料夾,並刪除已經不存在的檔案資訊
*/
private void getDeletedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = oldDirFileMap.keySet().iterator(); iterator.hasNext();) {
String key = iterator.next();
if (null == nowDirFileMap.get(key)) {
System.out.println("刪除" + oldDirFileMap.get(key));
iterator.remove();
oldDirFileMap.remove(key);
}
}
}
/**
* 執行緒的執行。對於修改檔案的情況,則視為刪除與增加兩個操作。
*/
public void run() {
boolean isError = false;
File file = new File(dir);
// 初始化開始監控時的檔案路徑狀態
totalScan(file, oldDirFileMap);
// 展示原有路徑下的檔案資訊
displayNowFile();
while (!isError) {
try {
Thread.sleep(period * 1000);
// 指定時間間間隔後掃描路徑
Map<String, String> nowDirFileMap = new HashMap<String, String>();
totalScan(file, nowDirFileMap);
// 得到刪除的檔案及資料夾
getDeletedFile(nowDirFileMap);
// 得到新增的檔案及資料夾
getAddedFile(nowDirFileMap);
// 注意:由於涉及到修改,所以一定要先檢測刪除的檔案,然後再檢測新增加的檔案
}
catch (InterruptedException e) {
System.out.println("對指定的檔案路徑進行監控時產生異常,異常資訊為:" + e.getMessage());
isError = true;
}
}
}
/**
* 遞迴掃描整個路徑
*
* @param dir
* @param ndir
* @param dirFileMap
* 存放掃描結果
*/
private void totalScan(File file, Map<String, String> dirFileMap) {
String[] fileList = file.list();
// 判斷是否為空目錄
if (null != fileList) {
for (int i = 0; i < fileList.length; i++) {
String pname = file.getAbsolutePath() + "\\" + fileList[i];
File tempFile = new File(pname);
if (tempFile.isDirectory()) {
dirFileMap.put(pname, "資料夾:\t" + pname);
totalScan(tempFile, dirFileMap);
} else {
// 不相同的資料夾下,存放的檔案可能名字相同,但是同一路徑下的檔案肯定不會相同,
// 所以採用全路徑做為key值
dirFileMap.put(pname, "檔案:\t" + pname);
}
}
}
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* <p>
* Description:監控某個檔案路徑下的變化
* </p>
*
* @author imasmallbird
* @version $Revision 1.1 $ 2009-10-10 下午01:14:26
*/
public class DirMonitor implements Runnable {
/**
* just for test
*
* @param args
*/
public static void main(String[] args) {
DirMonitor dirMonitor = new DirMonitor("D:\\temp", 5);
dirMonitor.run();
}
/**
* 監控的檔案路徑
*/
private String dir;
/**
* 原有檔案資訊
*/
private Map<String, String> oldDirFileMap;
/**
* 掃描間隔時間以秒為單位
*/
private int period;
/**
* 初始化相關資料
*/
public DirMonitor(String dir, int period) {
this.dir = dir;
this.period = period;
this.oldDirFileMap = new HashMap<String, String>();
}
/**
* 展示原有檔案
*/
private void displayNowFile() {
System.out.println(dir + "路徑原有檔案目錄如下:\n");
Set set = oldDirFileMap.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(oldDirFileMap.get(iterator.next()));
}
System.out.println("========================");
}
/**
* 得到增加的檔案及資料夾,並增加到已有的檔案資訊中
*/
private void getAddedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = nowDirFileMap.keySet().iterator(); iterator.hasNext();) {
String key = iterator.next();
if (null == oldDirFileMap.get(key)) {
oldDirFileMap.put(key, nowDirFileMap.get(key));
System.out.println("新增" + nowDirFileMap.get(key));
}
}
}
/**
* 得到刪除的檔案及資料夾,並刪除已經不存在的檔案資訊
*/
private void getDeletedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = oldDirFileMap.keySet().iterator(); iterator.hasNext();) {
String key = iterator.next();
if (null == nowDirFileMap.get(key)) {
System.out.println("刪除" + oldDirFileMap.get(key));
iterator.remove();
oldDirFileMap.remove(key);
}
}
}
/**
* 執行緒的執行。對於修改檔案的情況,則視為刪除與增加兩個操作。
*/
public void run() {
boolean isError = false;
File file = new File(dir);
// 初始化開始監控時的檔案路徑狀態
totalScan(file, oldDirFileMap);
// 展示原有路徑下的檔案資訊
displayNowFile();
while (!isError) {
try {
Thread.sleep(period * 1000);
// 指定時間間間隔後掃描路徑
Map<String, String> nowDirFileMap = new HashMap<String, String>();
totalScan(file, nowDirFileMap);
// 得到刪除的檔案及資料夾
getDeletedFile(nowDirFileMap);
// 得到新增的檔案及資料夾
getAddedFile(nowDirFileMap);
// 注意:由於涉及到修改,所以一定要先檢測刪除的檔案,然後再檢測新增加的檔案
}
catch (InterruptedException e) {
System.out.println("對指定的檔案路徑進行監控時產生異常,異常資訊為:" + e.getMessage());
isError = true;
}
}
}
/**
* 遞迴掃描整個路徑
*
* @param dir
* @param ndir
* @param dirFileMap
* 存放掃描結果
*/
private void totalScan(File file, Map<String, String> dirFileMap) {
String[] fileList = file.list();
// 判斷是否為空目錄
if (null != fileList) {
for (int i = 0; i < fileList.length; i++) {
String pname = file.getAbsolutePath() + "\\" + fileList[i];
File tempFile = new File(pname);
if (tempFile.isDirectory()) {
dirFileMap.put(pname, "資料夾:\t" + pname);
totalScan(tempFile, dirFileMap);
} else {
// 不相同的資料夾下,存放的檔案可能名字相同,但是同一路徑下的檔案肯定不會相同,
// 所以採用全路徑做為key值
dirFileMap.put(pname, "檔案:\t" + pname);
}
}
}
}
}
相關文章
- java WatchService監控目錄變化Java
- pythonpyinotify監控檔案與目錄的變化Python
- Linux 使用 inotify 監控檔案或目錄變化Linux
- 如何在idea下的Java檔案目錄下建立jsp檔案IdeaJavaJS
- linux 監控檔案內容變化Linux
- 檔案目錄(MOOC)
- 檔案目錄配置
- Redhat:檔案目錄管理Redhat
- 檔案管理 檔案目錄概念
- Spark輸出自定義檔案目錄踩坑(Java)SparkJava
- DedeCMS模板目錄的檔案目錄結構
- 檔案的邏輯結構、檔案目錄
- 檔案目錄許可權操作
- idea訪問resources檔案目錄Idea
- linux的部分檔案目錄操作語句Linux
- 自動化檔案目錄結構生成工具——filemap.jsJS
- vue 路由自動化[讀取vue檔案目錄][支援children]Vue路由
- iOS沙盒檔案目錄介紹iOS
- 如何監聽URL的變化?
- Java實現檔案監控器FileMonitorJava
- Linux中操作工作目錄和檔案目錄Linux
- 監控索引的使用(轉)索引
- Java程式碼中,如何監控Mysql的binlog?JavaMySql
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務Vue變數
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務...Vue變數
- 使用C#如何監控選定資料夾中檔案的變動情況?C#
- 如何監聽陣列變化?陣列
- node.js監聽檔案變化Node.js
- linux檔案目錄結構彙總!Linux學習Linux
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- vue是如何監聽陣列變化的Vue陣列
- 論如何監聽一個物件的變化物件
- 動態監控input的值的變化 賦值value觸發賦值
- 轉轉支付通道監控系統的搭建
- React和Vue中,是如何監聽變數變化的ReactVue變數
- php一句話獲取獲取檔案目錄的方法PHP
- 鴻蒙前端開發1-檔案目錄結構鴻蒙前端
- Linux基礎學習系列——Linux檔案目錄操作命令Linux
- Linux學習之linux檔案目錄結構彙總Linux