android 监听文件和目录的创建删除移动等事件 博客分类: Android
AndroidOSLinuxAccessBlog.
android.os下的FileObserver类是一个用于监听文件访问、创建、修改、删除、移动等操作的监听器,基于linux的inotify。 FileObserver 是个抽象类,必须继承它才能使用。每个FileObserver对象监听一个单独的文件或者文件夹,如果监视的是一个文件夹,那么文件夹下所有的文件和级联子目录的改变都会触发监听的事件。
所能监听的事件类型如下:
ACCESS,即文件被访问
MODIFY,文件被 修改
ATTRIB,文件属性被修改,如 chmod、chown、touch 等
CLOSE_WRITE,可写文件被 close
CLOSE_NOWRITE,不可写文件被 close
OPEN,文件被 open
MOVED_FROM,文件被移走,如 mv
MOVED_TO,文件被移来,如 mv、cp
CREATE,创建新文件
DELETE,文件被删除,如 rm
DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
ALL_EVENTS,包括上面的所有事件
这些都是FileObserver的静态共有属性。
下面举个例子说明一下其用法。
比如,我要监听sd卡的目录创建事件,新建一个类SDCardListener继承FileObserver:
Java代码
1.import android.os.FileObserver;
2.import android.util.Log;
3.
4./**
5. * sd卡上的目录创建监听器
6. * @author chroya
7. *
8. */
9.public class SDCardListener extends FileObserver {
10.
11. public SDCardListener(String path) {
12. /*
13. * 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,
14. * 则int参数是要监听的事件类型.
15. */
16. super(path);
17. }
18.
19. @Override
20. public void onEvent(int event, String path) {
21. switch(event) {
22. case FileObserver.ALL_EVENTS:
23. Log.d("all", "path:"+ path);
24. break;
25. case FileObserver.CREATE:
26. Log.d("Create", "path:"+ path);
27. break;
28. }
29. }
30.}
Java代码
1.import android.os.FileObserver;
2.import android.util.Log;
3.
4./**
5. * sd卡上的目录创建监听器
6. * @author chroya
7. *
8. */
9.public class SDCardListener extends FileObserver {
10.
11. public SDCardListener(String path) {
12. /*
13. * 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,
14. * 则int参数是要监听的事件类型.
15. */
16. super(path);
17. }
18.
19. @Override
20. public void onEvent(int event, String path) {
21. switch(event) {
22. case FileObserver.ALL_EVENTS:
23. Log.d("all", "path:"+ path);
24. break;
25. case FileObserver.CREATE:
26. Log.d("Create", "path:"+ path);
27. break;
28. }
29. }
30.}
import android.os.FileObserver;
import android.util.Log;
/**
* sd卡上的目录创建监听器
* @author chroya
*
*/
public class SDCardListener extends FileObserver {
public SDCardListener(String path) {
/*
* 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,
* 则int参数是要监听的事件类型.
*/
super(path);
}
@Override
public void onEvent(int event, String path) {
switch(event) {
case FileObserver.ALL_EVENTS:
Log.d("all", "path:"+ path);
break;
case FileObserver.CREATE:
Log.d("Create", "path:"+ path);
break;
}
}
} onEvent是回调,系统监听到事件后会触发此事件,参数event就是上面所说的事件类型,根据类型,我们可以做相应的处理,参数path就是触发事件的目录。
然后使用它:
Java代码
1.SDCardListener listener = new SDCardListener("/sdcard");
2.//开始监听
3.listener.startWatching();
4./*
5.* 在这里做一些操作,比如创建目录什么的
6.*/
7.//最后停止监听
8.listener.stopWatching();
Java代码
1.SDCardListener listener = new SDCardListener("/sdcard");
2.//开始监听
3.listener.startWatching();
4./*
5.* 在这里做一些操作,比如创建目录什么的
6.*/
7.//最后停止监听
8.listener.stopWatching();
SDCardListener listener = new SDCardListener("/sdcard");
//开始监听
listener.startWatching();
/*
* 在这里做一些操作,比如创建目录什么的
*/
//最后停止监听
listener.stopWatching();
如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。
最后补充一点,比较重要 :
FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了。
分享到:
相关推荐
在Android平台上,SD卡文件浏览器是一款实用的应用程序,它允许用户查看和管理存储在设备SD卡上的文件和文件夹。这个应用通常具有直观的界面,采用列表视图展示SD卡内容,便于用户浏览、选择、复制、移动或删除文件...
在Android平台上,开发Java应用程序时,我们经常需要处理与文件系统相关的任务,其中之一就是实现文件监听器。这个功能允许我们实时监控一个特定的文件夹,一旦该文件夹中有新的文件出现,程序可以立即做出响应,...
在Android平台上,开发一个能列出SD卡上所有音乐文件并实现播放功能的应用是常见的需求。这个"Android sd卡音频文件列表显示+歌曲播放"的Demo就是为此目的设计的。它结合了文件系统操作、UI设计以及媒体播放技术,是...
在Android开发中,有时我们需要实时监控SD卡上文件的变化,例如在文件同步、备份或文件管理系统中。Android系统为此提供了一个名为`FileObserver`的类,它基于Linux的`INotify`机制,允许我们监听指定路径下的文件或...
在Android开发中,有时我们需要实时监控SD卡上文件的变化,比如文件的创建、删除、重命名或内容修改等。这通常可以通过使用`FileObserver`类来实现。`FileObserver`是Android提供的一种轻量级机制,用于监视指定目录...
在Android 6.0(API级别23)之前,应用程序默认拥有读写外部存储(如SD卡)的权限。但从Android 6.0开始,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。用户可以在应用的设置中给予...
在Android系统中,由于安全性和性能的考虑,应用程序通常不能直接访问内部存储空间,而是需要通过特定的方法来读写外部存储,也就是我们常说的SD卡(实际上现在多为内置存储)。本教程主要介绍如何在Android应用中...
在Android应用开发中,对SD卡(外部存储)的文件管理是常见的需求,尤其是在处理大量数据、媒体文件或用户保存的文件时。Android Studio作为官方推荐的开发环境,提供了丰富的工具和API来帮助开发者实现这一功能。...
Android 存储设备挂载流程详解 Android 存储设备挂载流程是一个复杂的过程,其中涉及到多个组件和模块的协作。在 Android 系统中,存储设备挂载流程可以分为手动挂载和自动挂载两个部分。本文将着重分析自动挂载...
在Android平台上,开发一个SD卡文件浏览器是一个常见的实践任务,这可以帮助用户查看并管理设备上的文件。本实例将深入探讨如何构建这样一个应用,主要涉及以下几个关键知识点: 1. **权限管理**:首先,由于...
在Android平台上,录制视频音频并将其存储到SD卡上是一个常见的功能,这通常涉及到多媒体处理、文件操作以及用户界面交互等多个方面。以下是对这个实例的详细解析: 首先,要实现视频音频的录制,我们需要使用...
在Android系统中,SD卡是用于扩展设备存储空间的一个重要组成部分,它允许用户存储大量数据,如音乐、图片、视频等。在这个特定的项目中,我们的目标是将SD卡中的MP3文件显示在一个ListView中。ListView是Android UI...
Android FileObserver 检测文件变化demo,Android FileObserver 检测文件其实也是基于linux的inotify实现的,是从linux内核2.6.13开始加进来的,不过FileObserver检测的文件还是有局限的,似乎只能检测到SD卡的文件...
在Android系统中,SD卡(Secure Digital Card)是设备存储扩展和数据交换的重要部分,尤其对于需要大量存储空间的应用程序而言。本压缩包"Android SD卡操作代码.zip"包含了一系列与Android应用程序如何读写SD卡相关...
Android系统基于Linux内核,因此它的文件系统也遵循类Unix的目录结构,如根目录(/)、数据目录(/data)以及外部存储(/storage/emulated/0),其中后者通常用于存储用户数据,包括SD卡内容。GetSDTree主要关注的...
1. **Android系统权限**:首先,为了读取微信的消息,需要在AndroidManifest.xml文件中声明相应的权限,如读取存储卡的权限(READ_EXTERNAL_STORAGE)和获取应用运行时权限的管理(ACCESS_FINE_LOCATION)。...
Android复制assets文件到SD卡是一种常见的文件操作,目的是将应用程序的assets文件夹中的文件复制到SD卡上,以便于应用程序的数据存储和读取。本文将详细介绍Android复制assets文件到SD卡的方法,包括使用线程池和...
在Android系统中,SD卡作为一个重要的外部存储空间,通常用于存储用户数据、应用缓存以及媒体文件等。本篇文章将深入探讨如何开发一个简单的SD卡文件浏览器——AndroidGetSDTree,通过分析源码,帮助读者理解和掌握...
在Android应用开发中,有时我们需要判断设备是否存在两个外部存储卡,即双SD卡。这个"Android应用源码之判断双SD卡_CheckDoubleSDCard"项目就是针对这一需求的一个实例。这个源码Demo可以帮助开发者理解如何在...