當我們要對一個文件或者文件夾進行監聽的時候,我們可以使用android api中的android.os.FileObserver ,下面就來介紹如何使用。
1.首先我們要new一個FileObserver對象,並根據自己的文件夾路徑對其實例化,如下:
[html] FileObserver observer;
observer = new FileObserver("文件路徑") {
@Override
public void onEvent(int event, final String file) {
}
};
FileObserver observer;
observer = new FileObserver("文件路徑") {
@Override
public void onEvent(int event, final String file) {
}
};
2.監聽你所關心的事件:在onEvent(int event,String path)中,通過匹配event的值,可以捕獲所發生的事件
例子:
[java] <span style="font-size:13px;">public void onEvent(int event, String path) {
switch(event){
case android.os.FileObserver.ALL_EVENTS:
//所有事件 相當於default的功能
/**
* 相關操作
*/
break;
case android.os.FileObserver.CREATE:
//文件被創建
/**
* 相關操作
*/
break;
case android.os.FileObserver.OPEN :
//文件被打開
/**
* 相關操作
*/
break;
case android.os.FileObserver.ACCESS:
//打開文件後,讀文件內容操作
/**
* 相關操作
*/
break;
case android.os.FileObserver.MODIFY:
//文件被修改
/**
* 相關操作
*/
break;
case android.os.FileObserver.ATTRIB:
//未明操作
/**
* 相關操作
*/
break;
case android.os.FileObserver.CLOSE_NOWRITE:
//沒有編輯文件,關閉
/**
* 相關操作
*/
break;
case android.os.FileObserver.CLOSE_WRITE:
//編輯完文件,關閉
/**
* 相關操作
*/
break;
case android.os.FileObserver.DELETE:
//文件被刪除
/**
* 相關操作
*/
break;
case android.os.FileObserver.MOVED_FROM:
//文件被移動
/**
* 相關操作
*/
break;
}
}
</span>
<span style="font-size:13px;">public void onEvent(int event, String path) {
switch(event){
case android.os.FileObserver.ALL_EVENTS:
//所有事件 相當於default的功能
/**
* 相關操作
*/
break;
case android.os.FileObserver.CREATE:
//文件被創建
/**
* 相關操作
*/
break;
case android.os.FileObserver.OPEN :
//文件被打開
/**
* 相關操作
*/
break;
case android.os.FileObserver.ACCESS:
//打開文件後,讀文件內容操作
/**
* 相關操作
*/
break;
case android.os.FileObserver.MODIFY:
//文件被修改 www.aiwalls.com
/**
* 相關操作
*/
break;
case android.os.FileObserver.ATTRIB:
//未明操作
/**
* 相關操作
*/
break;
case android.os.FileObserver.CLOSE_NOWRITE:
//沒有編輯文件,關閉
/**
* 相關操作
*/
break;
case android.os.FileObserver.CLOSE_WRITE:
//編輯完文件,關閉
/**
* 相關操作
*/
break;
case android.os.FileObserver.DELETE:
//文件被刪除
/**
* 相關操作
*/
break;
case android.os.FileObserver.MOVED_FROM:
//文件被移動
/**
* 相關操作
*/
break;
}
}
</span>
3. 篩選監聽事件,防止進入死循環
上面列出瞭FileObserver所能監聽的大部分事件,但是在實際應用當中並不需要監聽全部事件,隻選擇我們自己關心的事件來進行監聽就可以,過多的事件監聽會導致程序邏輯的混亂。
例如在監聽文件被訪問的操作時,打開這個文件
case android.os.FileObserver.ACCESS:
//打開文件後,讀文件內容操作
File file = new File(filePath+File.separator+path);
String data = readFile(file);//讀取文件內容操作
break;
當程序執行到readFile(file)時,onEvent()方法會再被觸發,然後匹配到是ACCESS事件,又回到readFile(file)操作,結果導致死循環。
4.啟用文件監聽器.
在自己需要的地方啟動observer.startWatching();
5.取消文件監聽器.
當我們不需要再進行監聽時,取消監聽observer.stopWatching();
摘自 agods–足跡