Android创建文件实现对文件监听示例


在Android中,文件监听通常涉及到`FileObserver`类。下面是一个简单的示例,展示了如何在Android应用中创建一个文件,并设置`FileObserver`来监听该文件的变化(如创建、修改、删除等)。

首先,你需要在你的Android项目中添加一个`FileObserver`的实现。这个观察者会在指定的目录下监视文件系统的变化。


import android.os.Bundle;
import android.os.Environment;
import android.os.FileObserver;
import android.app.Activity;
import android.widget.Toast;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileMonitorActivity extends Activity {

    private FileObserver fileObserver;
    private File targetFile;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 设置目标文件的路径,这里以外部存储的一个文件为例
        String filePath = Environment.getExternalStorageDirectory().getPath() + "/example.txt";
        targetFile = new File(filePath);

        // 确保文件存在,如果不存在则创建
        if (!targetFile.exists()) {
            try {
                targetFile.createNewFile();
                // 可以选择在这里写入一些初始数据
                FileWriter writer = new FileWriter(targetFile, true);
                writer.write("Initial content");
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 初始化FileObserver,监视targetFile的父目录(因为FileObserver不能直接监视单个文件)
        fileObserver = new FileObserver(targetFile.getParent()) {
            @Override
            public void onEvent(int event, String path) {
                // 检查事件是否与我们的目标文件相关
                if (targetFile.getName().equals(path)) {
                    String eventType = "";
                    switch (event) {
                        case FileObserver.CREATE:
                            eventType = "CREATE";
                            break;
                        case FileObserver.DELETE:
                            eventType = "DELETE";
                            break;
                        case FileObserver.MODIFY:
                            eventType = "MODIFY";
                            break;
                        // 你可以根据需要添加更多的事件类型
                    }
                    Toast.makeText(FileMonitorActivity.this, "File " + eventType, Toast.LENGTH_SHORT).show();
                }
            }
        };

        // 开始监听
        fileObserver.startWatching();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 停止监听
        if (fileObserver != null) {
            fileObserver.stopWatching();
        }
    }
}

**注意**:

- `FileObserver`不能直接监视单个文件,而是监视一个目录。因此,在这个例子中,我们监视的是目标文件的父目录。

- 你需要确保你的应用具有写入外部存储的权限。在Android 6.0及以上版本中,你还需要在运行时请求这些权限。

- 当文件被创建、修改或删除时,`onEvent`方法会被调用。你需要根据事件类型(`event`参数)来判断发生了哪种类型的变更。

- 考虑到性能和资源消耗,`FileObserver`可能在某些情况下不会捕获所有事件,尤其是在高频率的文件系统变化时。

- 示例中的`Toast`消息仅用于演示目的,你可能需要根据实际的应用需求来处理这些事件。