2020年6月29日
项目需求:需要监听文件发生的改动(.txt)文件,当文件发生变化时读取并进行相应的处理
方案设计:
(1)开启线程,定时读取该文件,检测是否该文件发生变化。
(2)寻找可以监听文件变化的系统API,找到FileObserver这个系统API
使用方式
1.继承FileObserver
package com.dudu.mylibrary;
import android.content.Context;
import android.os.FileObserver;
import android.support.annotation.Nullable;
import android.util.Log;
public class FileModifyObserver extends FileObserver {
private Context mContext;
private OnLookListener mListener;
public FileModifyObserver(Context context,String path,OnLookListener listener) {
super(path,FileObserver.ALL_EVENTS);
this.mContext = context;
this.mListener = listener;
}
@Override
public void onEvent(int event, @Nullable String path) {
Log.d("MakeMyJar_APP",event+"监控文件");
if(event == FileObserver.MODIFY){
mListener.onSuccess(9999);
}
}
}
```
调用方式:
```js
package com.dudu.mylibrary;
import android.content.Context;
public class LookHelper {
//重点--生成全局变量,防止系统回收
public static FileModifyObserver fileModifyObserver;
public static void doLook(LookConfig config,OnLookListener listener){
//获取相应的参数
Context context = config.getContext();
String filePath = config.getFilePath();
//开始文件监听工作
fileModifyObserver = new FileModifyObserver(context,filePath,listener);
fileModifyObserver.startWatching();
}
}
- 调用方式
package com.dudu.mylibrary; import android.content.Context; public class LookHelper { //重点--生成全局变量,防止系统回收 public static FileModifyObserver fileModifyObserver; public static void doLook(LookConfig config,OnLookListener listener){ //获取相应的参数 Context context = config.getContext(); String filePath = config.getFilePath(); //开始文件监听工作 fileModifyObserver = new FileModifyObserver(context,filePath,listener); fileModifyObserver.startWatching(); } }
问题:1. 多次测验过程中,出现文件变化监控不到的情况,生成全局变量即可
参考:
[Android FileObserver 监听文件变化]
[Android中的FileObserver监听无效]