`

【Android】监听文件和目录的创建删除移动等事件

阅读更多

 

出于安全上的需要,我们经常需要监听sd卡或者其他路径上的文件夹创建,那么,如何实现呢,由于android sdk提供了丰富易用的接口,所以问题很简单。

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. }  

       onEvent是回调,系统监听到事件后会触发此事件,参数event就是上面所说的事件类型,根据类型,我们可以做相应的处理,参数path就是触发事件的目录。

      然后使用它:

Java代码   收藏代码
  1. SDCardListener listener = new SDCardListener("/sdcard");  
  2. //开始监听  
  3. listener.startWatching();  
  4. /* 
  5. * 在这里做一些操作,比如创建目录什么的 
  6. */  
  7. //最后停止监听  
  8. listener.stopWatching();  

 

      如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。

      最后补充一点,比较重要 :
      FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了。

分享到:
评论

相关推荐

    Android 拍照、截图事件监听实现源码

    `FileObserver`是一个用于监视文件或目录变化的类,它可以监控创建、删除、修改、移动等事件。 ```java public class MediaObserver extends FileObserver { public MediaObserver(String path, int mask) { ...

    android 监听SD卡文件变化的实现代码

    Android系统为此提供了一个名为`FileObserver`的类,它基于Linux的`INotify`机制,允许我们监听指定路径下的文件或文件夹的各种事件,如创建、删除、移动和打开等。 首先,我们来看如何创建一个`FileObserver`实例...

    android 文件浏览器

    1. Android文件系统:Android采用Linux内核,因此其文件系统与传统的Linux文件系统类似,包括根目录、挂载点、文件和目录等。 2. Android存储空间:Android设备通常有两种存储方式,内部存储(Internal Storage)和...

    Android文件资源管理项目

    文件管理器需要提供创建、删除、重命名文件和目录的功能。这些操作可以通过File类提供的mkdirs(), delete(), renameTo()等方法实现。同时,要注意处理可能出现的异常,如文件不存在、无权限等。 4. **UI设计与布局*...

    Android 文件选择器(支持选择u盘).zip

    开发者可能创建了一个BroadcastReceiver或者使用startActivityForResult()来监听U盘插入和拔出事件。 3. **Permission管理**:由于Android 6.0及以上版本引入了运行时权限,开发者需要在运行时请求读写外部存储和...

    Android 文件管理器

    这个项目名为"FileManagerExample",它包含了创建、浏览、编辑、复制、移动、删除文件和目录等一系列常见的文件管理功能。 首先,Android的文件管理主要涉及到以下几个核心知识点: 1. **文件操作API**:Android...

    Android文件浏览器源码

    首先,我们要明白Android文件浏览器的基本功能:列出指定目录下的文件和子目录,支持用户选择、查看、复制、移动和删除文件。这个简单的文件浏览器实现了这些基础功能,对于初学者来说,这是一个很好的学习起点。 ...

    Android简单文件浏览器源代码

    - `java.io.File`:Java中的核心类,用于处理文件和目录,包括创建、删除、重命名、获取属性等操作。 - `ContentResolver`:Android特有的API,用于与内容提供者交互,访问文件系统或媒体库。 - `Intent`:用于...

    Android 小米文件管理器源码.rar

    4. 文件操作逻辑:包括创建、删除、移动、复制等文件操作。这些功能通常由`FileOperation`类或者相关服务实现,涉及到了Android的文件I/O操作和Intent机制。 5. 搜索功能:文件管理器的搜索功能涉及到全文搜索或者...

    Android 文件管理器源码.zip

    - 实现文件的创建、删除、重命名、复制、移动等操作,涉及`File`类的各种方法。 - 对于大文件,可能需要使用异步任务(`AsyncTask`)避免阻塞UI线程。 6. **权限管理**: - Android 6.0及以上版本需要动态请求`...

    一个Android WiFi 文件共享程序

    3. **文件I/O操作**:在Android中处理文件,包括读取、写入、创建和删除文件,是文件共享程序的基础。 4. **蓝牙和WiFi的区别**:虽然两者都能进行设备间通信,但WiFi Direct在速度和文件大小上有优势,适合大文件...

    Android录音 获取录音文件 录音时间

    在Android平台上进行录音操作是移动应用开发中常见的功能,它涉及到多媒体处理、文件操作以及用户交互等多个方面。本文将深入探讨如何在Android中实现录音、获取录音文件以及控制录音时间,同时也会提及与动画和文件...

    android文件管理器

    在Android平台上,文件管理器是用户与设备存储交互的重要工具,它允许用户浏览、操作、创建、删除和管理各种类型的文件。本篇文章将深入探讨如何使用Android UI组件ListView来实现一个基本的文件管理器,以及如何...

    Android小米文件管理器源码

    开发者会接触到`File`类用于创建、读取、写入和删除文件,以及`InputStream`和`OutputStream`用于流式数据操作。 2. **SQLite数据库**:在管理文件时,可能会用到SQLite数据库来存储文件元数据,例如文件路径、大小...

    android 文件管理器

    1. 创建/删除/重命名:使用`File`类的方法实现对文件和目录的创建、删除和重命名操作。 2. 复制/移动:涉及`ParcelFileDescriptor`和`FileChannel`,用于在文件系统间传输数据。 3. 解压缩/压缩:可以集成第三方库如...

    Android项目文件管理器源码,文件拖曳,list弹性,root ,zip压缩解.rar

    通过这个项目,开发者可以学习到Android应用开发的基础知识,包括UI设计、文件操作、事件处理、权限管理和项目构建等方面。同时,对于希望深入了解Android系统和文件管理功能的人来说,这是一个很好的实践案例。

    android SD卡文件浏览器

    在Android平台上,SD卡文件浏览器是一款实用的应用程序,它允许用户查看和管理存储在设备SD卡上的文件和文件夹。这个应用通常具有直观的界面,采用列表视图展示SD卡内容,便于用户浏览、选择、复制、移动或删除文件...

    Android移动开发基础案例教程课件PPT

    "SQLite数据库"深入介绍了如何在Android中操作数据库,包括创建表、插入、查询、更新和删除数据的SQL语句,以及如何在应用中使用SQLiteOpenHelper类。 最后,"Android高级编程"可能涵盖了更复杂的话题,如多线程...

Global site tag (gtag.js) - Google Analytics