一. 概述:
android.os包下的FileObserver類是一個用於監聽文件訪問、創建、修改、刪除、移動等操作的監聽器,基於linux的INotify。
FileObserver是個抽象類,必須繼承它才能使用。每個FileObserver對象監聽一個單獨的文件或者文件夾,如果監視的是一個
文件夾,那么文件夾下所有的文件和級聯子目錄的改變都會觸發監聽的事件。
二. 監聽的事件類型:
(1)ACCESS,即文件被訪問。
(2)MODIFY,文件被修改。
(3)ATTRIB,文件屬性被修改,如 chmod、chown、touch 等。
(4)CLOSE_WRITE,可寫文件被 close。
(5)CLOSE_NOWRITE,不可寫文件被 close。
(6)OPEN,文件被 open。
(7)MOVED_FROM,文件被移走,如 mv。
(8)MOVED_TO,文件被移來,如 mv、cp。
(9)CREATE,創建新文件。
(10)DELETE,文件被刪除,如 rm。
(11)DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己。
(12)MOVE_SELF,自移動,即一個可執行文件在執行時移動自己。
(13)CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)。
(14)ALL_EVENTS,包括上面的所有事件。
注:上面的所有靜態變量都是FileObserver靜態屬性。
三. 例:
(1)創建目錄監聽器:
import android.os.FileObserver; import android.util.Log; /** * SD卡中的目錄創建監聽器。 * * @author mayingcai */ public class SDCardListener extends FileObserver { public SDCardListener(String path) { /* * 這種構造方法是默認監聽所有事件的,如果使用 super(String,int)這種構造方法, * 則int參數是要監聽的事件類型. */ super(path); } @Override public void onEvent(int event, String path) { switch(event) { case FileObserver.ALL_EVENTS: Log.d("all", "path:"+ path); break; case FileObserver.CREATE: Log.d("Create", "path:"+ path); break; } } }
(2)給目錄設置監聽器:
SDCardListener listener = new SDCardListener("目錄"); //開始監聽 listener.startWatching(); /* * 在這里做一些操作,比如創建目錄什么的 */ //停止監聽 listener.stopWatching();
四. 注意事項:
FileObserver對象必須保持一個引用,確保不被垃圾收集器回收掉,否則就不會觸發事件,這里可以考慮使用Service服務。
本文轉自:http://blog.csdn.net/mayingcai1987/article/details/6210904
