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;

/**

* <pre>

*    @author : hanshizhe

*    e-mail  : hanshizhe@foxmail.com

*    time    : 2020/6/28 11:54

*    desc    : 文件监听修改器

* </pre>

*/

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;

/**

* <pre>

*    @author : hanshizhe

*    e-mail  : hanshizhe@foxmail.com

*    time    : 2020/6/28 11:25

*    desc    :

* </pre>

*/

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。