Skip to content

Instantly share code, notes, and snippets.

@shirou
Created November 2, 2010 02:24
Show Gist options
  • Save shirou/659180 to your computer and use it in GitHub Desktop.
Save shirou/659180 to your computer and use it in GitHub Desktop.
Detect file change using FileObserver on Android
private class PathFileObserver extends FileObserver{
static final String TAG="FILEOBSERVER";
/**
* should be end with File.separator
*/
String rootPath;
static final int mask = (FileObserver.CREATE |
FileObserver.DELETE |
FileObserver.DELETE_SELF |
FileObserver.MODIFY |
FileObserver.MOVED_FROM |
FileObserver.MOVED_TO |
FileObserver.MOVE_SELF);
public PathFileObserver(String root){
super(root, mask);
if (! root.endsWith(File.separator)){
root += File.separator;
}
rootPath = root;
}
public void onEvent(int event, String path) {
switch(event){
case FileObserver.CREATE:
Log.d(TAG, "CREATE:" + rootPath + path);
break;
case FileObserver.DELETE:
Log.d(TAG, "DELETE:" + rootPath + path);
break;
case FileObserver.DELETE_SELF:
Log.d(TAG, "DELETE_SELF:" + rootPath + path);
break;
case FileObserver.MODIFY:
Log.d(TAG, "MODIFY:" + rootPath + path);
break;
case FileObserver.MOVED_FROM:
Log.d(TAG, "MOVED_FROM:" + rootPath + path);
break;
case FileObserver.MOVED_TO:
Log.d(TAG, "MOVED_TO:" + path);
break;
case FileObserver.MOVE_SELF:
Log.d(TAG, "MOVE_SELF:" + path);
break;
default:
// just ignore
break;
}
}
public void close(){
super.finalize();
}
}
@TheBestDenis
Copy link

TheBestDenis commented Apr 22, 2020

Getting this error in logcat
java.lang.NoSuchMethodError: No direct method (Ljava/io/File;I)V in class Landroid/os/FileObserver; or its super classes (declaration of 'android.os.FileObserver' appears in /system/framework/framework.jar)
Can anyone help

I run into the same. Did you solved it ?

I saw that message (or something like that) when i was trying to use constructor FileObserver(File). Use of deprecated FileObserver(String) solved my problem. Don't know why...
And for a while look at FixedFileObserver. It's in russian, but code is "in" java. Original FileObserver has bugs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment