2020-06-29

2020年6月29日

  项目需求:需要监听文件发生的改动(.txt)文件,当文件发生变化时读取并进行相应的处理

  方案设计:

    (1)开启线程,定时读取该文件,检测是否该文件发生变化。

    (2)寻找可以监听文件变化的系统API,找到FileObserver这个系统API

使用方式

  ```js

package com.dudu.mylibrary;

import android.content.Context;

import android.os.FileObserver;

import android.support.annotation.Nullable;

import android.util.Log;

/**

*

*    @author : hanshizhe

*    e-mail  : [email protected]

*    time    : 2020/6/28 11:54

*    desc    : 文件监听修改器

*

*/

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;

/**

*

*    @author : hanshizhe

*    e-mail  : [email protected]

*    time    : 2020/6/28 11:25

*    desc    :

*

*/

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 监听文件变化](https://www.jianshu.com/p/a509ad4311c0)

[Android中的FileObserver监听无效](https://www.cnblogs.com/chorm590/p/12370952.html)

你可能感兴趣的:(2020-06-29)