Android FileObserver 的使用与简要原理

FileObserver 是一个 Android 类,用于监视指定文件或目录的更改。它可以帮助开发者实时检测文件或目录的创建删除重命名修改等操作。通过使用 FileObserver,开发者可以及时响应这些文件系统变化,并在相应的事件发生时执行特定的操作。


FileObserver 的使用:

class MainActivity : AppCompatActivity() {

    var fileObserver: FileObserver? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val path = "/sdcard/xxxx/xxxx" // 监视的文件或目录路径

        fileObserver = object : FileObserver(path) {
            override fun onEvent(event: Int, path: String?) {
                when (event) {
                    CREATE -> {}       // 文件或目录创建
                    DELETE -> {}       // 文件或目录删除
                    DELETE_SELF -> {}  // 自身删除
                    MODIFY -> {}       // 文件或目录修改
                    MOVED_FROM -> {}   // 移动或重命名
                    MOVED_TO -> {}     // 移动或重命名后
                    ATTRIB -> {}       // 文件或目录属性变化
                }
            }
        }
        fileObserver?.startWatching()
    }

    override fun onDestroy() {
        super.onDestroy()
        fileObserver?.stopWatching()
    }

}

注意:需要确保监听的文件路径有读写权限后程序才能正常运行


FileObserver 在底层通过 JNI(Java Native Interface)与 C/C++ 代码进行交互,调用了系统的 inotify 接口。当 FileObserver 实例启动后,它会创建一个底层的 inotify 实例,并请求内核对指定文件或目录进行监视

当监视的文件或目录发生变化时,内核会生成相应的事件,并将事件信息传递给 FileObserver。 FileObserver 将捕获这些事件并触发相应的回调方法,如 onEvent()。


需要注意的是,FileObserver 在底层的实现使用了 Linux 的特定功能,因此只能Android 上使用,而不适用于其他操作系统或平台。

猜你喜欢

转载自blog.csdn.net/weixin_47592544/article/details/132627060