灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3151回复:0

FileObserver使用

楼主#
更多 发布于:2012-09-06 13:52


当我们要对一个文件或者文件夹进行监听的时候,我们可以使用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.atcpu.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();



喜欢0 评分0
游客

返回顶部