FileObserver 是一个 Android 类,用于监视指定文件或目录的更改。它可以帮助开发者实时检测文件或目录的创建、删除、重命名、修改等操作。通过使用 FileObserver,开发者可以及时响应这些文件系统变化,并在相应的事件发生时执行特定的操作。
FileObserver 的使用:
class MainActivity : AppCompatActivity() {var fileObserver: FileObserver? = nulloverride 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 上使用,而不适用于其他操作系统或平台。