android監聽文件和目錄的創建刪除移動等事件 博客分類: Android AndroidLinuxOSAccess

      android.os下的FileObserver類是一個用於監聽文件訪問、創建、修改、刪除、移動等操作的監聽器,基於linux的inotify。 FileObserver 是個抽象類,必須繼承它才能使用。每個FileObserver對象監聽一個單獨的文件或者文件夾,如果監視的是一個文件夾,那麼文件夾下所有的文件和級聯子目錄的改變都會觸發監聽的事件。     所能監聽的事件類型如下:     ACCESS,即文件被訪問     MODIFY,文件被 修改     ATTRIB,文件屬性被修改,如 chmod、chown、touch 等     CLOSE_WRITE,可寫文件被 close     CLOSE_NOWRITE,不可寫文件被 close     OPEN,文件被 open     MOVED_FROM,文件被移走,如 mv     MOVED_TO,文件被移來,如 mv、cp     CREATE,創建新文件     DELETE,文件被刪除,如 rm     DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己     MOVE_SELF,自移動,即一個可執行文件在執行時移動自己     CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)     ALL_EVENTS,包括上面的所有事件       這些都是FileObserver的靜態共有屬性。       下面舉個例子說明一下其用法。       比如,我要監聽sd卡的目錄創建事件,新建一個類SDCardListener繼承FileObserver:

import android.os.FileObserver;
import android.util.Log;

/**
 * sd卡上的目錄創建監聽器
 * @author chroya
 *
 */
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;
		}
	}
}

       onEvent是回調,系統監聽到事件後會觸發此事件,參數event就是上面所說的事件類型,根據類型,我們可以做相應的處理,參數path就是觸發事件的目錄。

      然後使用它:

SDCardListener listener = new SDCardListener("/sdcard");
//開始監聽
listener.startWatching();
/*
* 在這裏做一些操作,比如創建目錄什麼的
*/
//最後停止監聽
listener.stopWatching();

      如果要在onEvent中做較多操作,最好用線程去做 ,以免因爲阻塞接收不到後面的事件。 最後補充一點,比較重要 :       FileObserver對象必須保持一個引用,確保不被垃圾收集器回收掉,否則就不會觸發事件了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章