FileObserver -> onEvent(event, path): path is NULL

android, fileobserver

Solution

According to the documentation of `onEvent()`:

The path, relative to the main monitored file or directory, of the file or directory which triggered the event

So I guess when `path` is `null` it is the the specified file or directory...

You need to keep track of the original path yourself. And append the `path` of `onEvent()` to this path to get the full path (unless you are tracking a file and its value is always `null`):

FileObserver observer = new FileObserver(imageUri.getPath()) {
    public String basePath;

    @Override
    public void onEvent(int event, String path) {
        String fullPath = basePath;
        if(path != null) {
            // Eventually add a '/' in between (depending on basePath)
            fullPath += path;
        }
        Log.d(TAG, "FILE: "+fullPath);
    }
};
observer.basePath = imageUri.getPath();
observer.startWatching();

I tried to keep the example as close to your code snippet as possible. But, it is much better to create a full-blown class extending `FileObserver`, so you can add an constructor to store the `basePath` and are not required to access the public field from outside the class/instance!

Problem

I want to know when a file is finished writing, and to do that I'm trying to use `FileObserver`. I'm doing it like this: ``` FileObserver observer = new FileObserver(imageUri.getPath()) { @Override public void onEvent(int event, String path) { if(event == FileObserver.CLOSE_WRITE) Log.d(TAG, "FILE: "+path); } }; observer.startWatching(); ``` `imageUri` is a valid `Uri`. When the file is closed I get the following log entry: ``` FILE: null ``` Why is it `null`? It's possible that the user writes several files, so I need to know which one is triggering the event. Thanks!

Original source