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

1.如何实现一个FileObserver

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

onEvent(int event,String path)方法:

例子

publicclassMyFileObserverextendsFileObserver{

/**

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

*/

publicMyFileObserver (String path) {

super(path);

}

@Override

publicvoidonEvent(intevent, String path) {

}

1.}

2.

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

例子:

publicvoidonEvent(intevent, String path) {

switch(event){

caseandroid.os.FileObserver.ALL_EVENTS:

//所有事件相当于default的功能

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.CREATE:

//文件被创建

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.OPEN:

//文件被打开

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.ACCESS:

//打开文件后,读文件内容操作

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.MODIFY:

//文件被修改

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.ATTRIB:

//未明操作

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.CLOSE_NOWRITE:

//没有编辑文件,关闭

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.CLOSE_WRITE:

//编辑完文件,关闭

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.DELETE:

//文件被删除

/**

*相关操作

*/

break;

caseandroid.os.FileObserver.MOVED_FROM:

//文件被移动

/**

*相关操作

*/

break;

}

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

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

上面列出了FileObserver所能监听的大部分事件,但是在实际应用当中并不需要监听全部事件,只选择我们自己关心的事件来进行监听就可以,过多的事件监听会导致程序逻辑的混乱。

例如在监听文件被访问的操作时,打开这个文件

caseandroid.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 =newMyFileObserver("sdcard/myobserver/file");

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

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

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

publicvoidonEvent(intevent, String path) {

switch(event){

caseandroid.os.FileObserver.CLOSE_WRITE:{

newThread(){

publicvoidrun(){

//批量任务

}

}.start();

}

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

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

更多相关文章

  1. android 地图 infoWindow的每个控件添加点击事件
  2. android学习笔记(4)-android的文件的操作模式与单元测试
  3. 更改Android模拟器中的hosts文件
  4. 【Androidd Release】AndroidStudio 发布apk 提示资源文件未翻译
  5. Android:安装APK包以后系统文件目录的变化
  6. 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(
  7. 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件
  8. Androd学习笔记——Android中Touch事件的处理逻辑
  9. android中使用properties文件配置

随机推荐

  1. android RadioGroup设置某一个被选中
  2. Android(安卓)1.5 自带的图标一览表
  3. android时间控件DatePicker使用实例
  4. Android(安卓)ContextMenu上下文菜单
  5. Android(安卓)仿支付宝密码输入页面
  6. Android(安卓)面试:常见问题总结
  7. Android解析XML之XmlPullParser
  8. Android监听HOME键的最简单的方法
  9. android 水平进度对话框
  10. Android之NetworkOnMainThreadException