失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 用FileObserver实现阅后即焚

用FileObserver实现阅后即焚

时间:2019-09-19 04:39:54

相关推荐

用FileObserver实现阅后即焚

一. 概述:

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,包括上面的所有事件

二. 代码:

publicclassSDCardFileObserverextendsFileObserver{

privateTimermTimer;

privateMap<String,DeleteFileTimerTask>tasks;

StringtargetDirName,targetFileName;

publicSDCardFileObserver(Stringpath,StringfileName,intmask){

super(path,mask);

mTimer=newTimer();

tasks=newHashMap<String,DeleteFileTimerTask>();

targetDirName=path;

targetFileName=fileName;

}

@Override

publicvoidonEvent(intevent,Stringpath){

finalintaction=event&FileObserver.ALL_EVENTS;

switch(action){

caseFileObserver.OPEN:

Log.d("FileObserver","fileopen;path="+path);

break;

caseFileObserver.CLOSE_NOWRITE:

caseFileObserver.CLOSE_WRITE:

Log.d("FileObserver","fileclose;path="+path);

if(!path.endsWith(targetFileName))return;

if(tasks.containsKey(path)){

DeleteFileTimerTasktask=tasks.get(path);

if(task.cancel()){

task=newDeleteFileTimerTask(path);

mTimer.schedule(task,30000);

}

}

else{

DeleteFileTimerTasktask=newDeleteFileTimerTask(path);

tasks.put(path,task);

mTimer.schedule(task,30000);

}

break;

default:

break;

}

}

classDeleteFileTimerTaskextendsTimerTask{

privateStringpath;

publicDeleteFileTimerTask(Stringpath){

this.path=path;

}

@Override

publicvoidrun(){

StringtmpFile=targetDirName+"/"+targetFileName;

Filef=newFile(tmpFile);

if(f.exists()&&f.isFile()){

Log.d("FileObserver","deletetmpfile"+path);

f.delete();

SDCardFileObserver.this.stopWatching();

}

tasks.remove(path);

}

}

}

喜欢 就关注吧,欢迎投稿!

如果觉得《用FileObserver实现阅后即焚》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。