在Java层常用FileObserver去监听文件的变化,它是基于Inotify实现的,在文件的信息发生变更以后,通过Inotify通知事件的变更。
FileObserver事件(FileObserver.java) | Inotify事件(inotify.h) | 说明 |
---|---|---|
ACCESS | IN_ACCESS | 读取文件内容 |
MODIFY | IN_MODIFY | 修改文件内容 |
ATTRIB | IN_ATTRIB | 修改文件属性,如权限,所有者,时间戳等 |
CLOSE_WRITE | IN_CLOSE_WRITE | 写入数据并关闭 |
CLOSE_NOWRITE | IN_CLOSE_NOWRITE | 关闭不作修改 |
OPEN | IN_OPEN | 打开文件或目录 |
MOVED_FROM | IN_MOVED_FROM | 文件或子目录从监控的目录中移出 |
MOVED_TO | IN_MOVED_TO | 文件或者子目录移动到监控目录 |
CREATE | IN_CREATE | 文件或子目录再监控文件中创建 |
DELETE | IN_DELETE | 文件从监控目录中删除 |
DELETE_SELF | IN_DELETE_SELF | 监控的文件或者目录已经被删除,监控停止 |
MOVE_SELF | IN_MOVE_SELF | 监控的文件或者目录被移除,监控还是继续。 |
文件目录
frameworks/base/core/java/android/os/FileObserver.java
frameworks/base/core/jni/android_util_FileObserver.cpp
FileObserver内部定义了一个静态线程类ObserverThread,随着FileObserver的实例对象初始化而创建。线程在启动之后,就会开始监听指定的FD的变化,并在监控文件或者目录预定义的事件发生以后,触发onEvent回调。
它能够对一个或者一组文件或者目录进行监听,但无论监听多少文件或者目录,其监听的事件类型都是一样的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。