一. 概述:linux
Android.os包下的FileObserver類是一個用於監聽文件訪問、建立、修改、刪除、移動等操做的監聽器,基於Linux的INotify。android
FileObserver是個抽象類,必須繼承它才能使用。每一個FileObserver對象監聽一個單獨的文件或者文件夾,若是監視的是一個ide
文件夾,那麼文件夾下全部的文件和級聯子目錄的改變都會觸發監聽的事件。.net
二. 監聽的事件類型:server
(1)ACCESS,即文件被訪問。對象
(2)MODIFY,文件被修改。繼承
(3)ATTRIB,文件屬性被修改,如 chmod、chown、touch 等。事件
(4)CLOSE_WRITE,可寫文件被 close。get
(5)CLOSE_NOWRITE,不可寫文件被 close。it
(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; } } }