Android 开发有时候需要检测某个文件夹的变化,就可以使用 FileObserver这个类。
FileObserver这个类是系统自带的,可以直接使用。
private FileObserver mFileObserver;
String path = "";//这个路径就是需要 监控的路径,但是只能监控当前目录的变化,其下子目录内的变化是监控不到的!!
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_backup);
if (null == mFileObserver) {
mFileObserver = new SDCardFileObserver(path);
mFileObserver.startWatching(); //开始监听
}
}
class SDCardFileObserver extends FileObserver {
String parentPath = "";
//mask:指定要监听的事件类型,默认为FileObserver.ALL_EVENTS
public SDCardFileObserver(String path, int mask) {
super(path, mask);
}
public SDCardFileObserver(String path) {
super(path);
parentPath = path;
}
@Override
public void onEvent(int event, String path) {
final int action = event & FileObserver.ALL_EVENTS;
switch (action) {
case FileObserver.ACCESS:
MyLog.i(true, "MainActivity", "event: 文件或目录被访问, path: " + path);
break;
case FileObserver.DELETE:
MyLog.i(true, "MainActivity", "event: 文件或目录被删除, path: " + path);
break;
case FileObserver.OPEN:
MyLog.i(true, "MainActivity", "event: 文件或目录被打开, path: " + path);
break;
case FileObserver.MODIFY:
MyLog.i(true, "MainActivity", "event: 文件或目录被修改, path: " + path);
break;
MyLog.i(true, "MainActivity", "event: 文件或目录被创建, path: " + path);
break;
}
}
}