FileObserver使用

當我們要對一個文件或者文件夾進行監聽的時候,我們可以使用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–足跡
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *