android监听文件创建,删除等的实现

作者: 小吉快跑呀 | 来源:发表于2017-11-23 13:37 被阅读0次
Type Fnction
abstract void onEvent(int event, String path ))
void startWatching()
void stopWatching()

监听实现所需要的类public abstract class FileObserver
他是基于linux内核的inotify机制,能实现对单个文件或者文件夹的操作进行监听。
并不能递归的对文件夹里面的文件夹进行监听,需要手动递归

Type Fnction
abstract void onEvent(int event, String path ))
void startWatching()
void stopWatching()

可以监听的事件的列表

Flag Usage
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 文件被关闭
ALL_EVENTS 包括上面的所有事件

一个例子

//一个封装好的抽象类
abstract class FileObserver{

    //避免给GC掉
    private var observers = mutableSetOf<FileObserver>()

    //对特定目录及其子目录进行递归并加入监听
    fun startObserve(rootpath :String){
        val fileObserver : FileObserver

        File(rootpath).listFiles().forEach {
            if (it.isDirectory){
                startObserve(it.path)
            }
        }
        //创建FileObserver
        fileObserver = object : FileObserver(rootpath, FileObserver.CREATE or FileObserver.DELETE or
                FileObserver.MOVED_FROM or FileObserver.MOVED_TO or DELETE_SELF or MOVE_SELF){

            override fun onEvent(event: Int, path: String?) {
                onDirctroyChange(rootpath)
            }
        }

        observers.add(fileObserver)
        fileObserver.startWatching()
    }
    //监听到改变后调用该方法
    abstract fun onDirctroyChange(rootpath: String)
}

测试代码

        val observer = object : com.xt.practice.FileObserver(){
            override fun onDirctroyChange(rootpath: String) {
                Log.e("MainActivity",rootpath)
            }

        }
        observer.startObserve(Environment.getExternalStorageDirectory().path+"/pratice")

        Thread{
            var i = 50
            Thread.sleep(2000)
            while(i < 100){
                File(Environment.getExternalStorageDirectory().path+"/pratice/childDir/${i}.tmp").createNewFile()
                i++;
            }
        }.start()

回调结果

image.png

经测试对文件移动,复制粘贴这些操作的监听无效,以及对文件夹的任何操作都无法监听,原因未知

相关文章

  • android监听文件创建,删除等的实现

    监听实现所需要的类public abstract class FileObserver他是基于linux内核的in...

  • Android中的FileObserver

    一、概述 android.os包下面的FileObserver是一个用于监听文件访问创建修改删除移动等操作的监听器...

  • FileObserver递归监听目录(解决无法监听目录的创建、删

    FileObserver递归监听目录(解决无法监听目录的创建、删除问题) 主要内容 为了解决Android媒体数据...

  • Java IO的基础操作书目录

    Java实现创建文件 Java重命名文件 Java实现删除文件 Java使用NIO删除文件 通过BufferedI...

  • File与IO

    File File类:表示文件和目录路径名的抽象。File类可以实现文件的创建、删除、重命名、得到路径、创建时间等...

  • 【Android】监听文件的创建

    需求是监听到指定目录创建文件后,将其移动到其他目录,并将原文件无效化。因为直接删除会在通知栏提示,不得已采用此方法...

  • rsync+inotify实现远程同步

    简介: rsync可以实现文件或目录的远程同步。 inotify可以实现对远程目录的监控(删除,创建,修改等),可...

  • Android学习笔记

    Android 1、10个基本简单的linux mkdir 创建文件夹 rmdir 删除文件夹 rm 删除文件 t...

  • Java监听器Listener的使用详解

    监听器用于监听Web应用中某些对象的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当监听范围的...

  • Linux基础9

    Linux文件管理命令详解1 文件管理 : 创建新文件,删除文件,查看文件,编辑文件等1)创建空文件使用 touc...

网友评论

    本文标题:android监听文件创建,删除等的实现

    本文链接:https://www.haomeiwen.com/subject/gslzvxtx.html