当我们要对一个文件或者文件夹进行监听的时候,我们可以使用android api中的android.os.FileObserver ,下面就来介绍如何使用。
1.首先我们要new一个FileObserver对象,并根据自己的文件夹路径对其实例化,如下:
FileObserver observer; observer = new FileObserver(“文件路径”) { @Override public void onEvent(int event, final String file) { } };
2.监听你所关心的事件:在onEvent(int event,String path)中,通过匹配event的值,可以捕获所发生的事件
例子:
<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>
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();