Android FileObserver

当我们要对一个文件或者文件夹进行监听的时候,我们可以使用android api中的android.os.FileObserver ,下面就来介绍如何使用。

1. 如何实现一个FileObserver

首先extends FileObserver 然后覆盖其构造器,最后覆盖

onEvent(int event,String path)方法:

例子

public class MyFileObserver extends FileObserver {

/**

path 是所监听的文件夹或者文件名。

*/

public MyFileObserver (String path) {

super(path);

}

@Override

public void onEvent(int event, String path) {

}

1. }

2.

3. 监听你所关心的事件:在onEvent(int event,String path)中,通过匹配event的值,可以捕获所发生的事件

例子:

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;

}

注意:在onEvent(int event,String path)中,path返回的是发生事件的文件名,并且不带路径,当我们在某个事件当中需要找到发生事件的文件就要结合它的路径才能找得到。

4. 筛选监听事件,防止进入死循环

上面列出了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)操作,结果导致死循环。

5. 启用文件监听器.

在实现了自己的文件监听器后,下面介绍如何恰当得启用它。

MyFileObserver mObserver = new MyFileObserver("sdcard/myobserver/file");

mObserver.startWatching();//启用文件监听器

取得文件监听器的对象,调用startWatching()开始监听。一开始我也以为就这么简单,后来在使用的时候,发现一旦在做批量任务的时候,文件监听器就不响应了。

所以这是后需要在逻辑处理模块添加线程:

public void onEvent(int event, String path) {

switch(event){

case android.os.FileObserver.CLOSE_WRITE:

new Thread(){

public void run(){

//批量任务

}

}.start();

}

这样在新的文件发生改变或者新的文件被创建的时候,文件监听器仍然可以检测到。

6. 停止。调用FileObserver中的stopWatching() ok

更多相关文章

  1. INSTALL_FAILED_TEST_ONLY
  2. android phone application 通知missed call的过程
  3. RN: android 显示 gif compile 'com.facebook.fresco:fresco
  4. Android(安卓)学习 笔记_09. WIFI网络操作
  5. Android(安卓)SQLite 数据库 java.lang.IllegalStateException:
  6. Android(安卓)GestureDetector手势识别类
  7. Android(安卓)的系统属性(SystemProperties)设置分析
  8. Qt for Android(安卓)使用 手记
  9. Android(安卓)-- NDK开发入门

随机推荐

  1. 《第一行代码》读完总结
  2. 将JavaFX运行到Android上
  3. android canvas常用的方法解析(一)
  4. 隐形成本巨大 微软点评Android六宗罪
  5. Android应用程序私有目录下文件操作总结
  6. Android——贝塞尔曲线的水波浪效果实现
  7. Android中的动画和原理(帧动画和补间动画
  8. Android(安卓)RatingBar 评星控件的自定
  9. Android调用系统安装程序打开本地文件(包
  10. 初识Android(安卓)网络机顶盒开发