Skip to content

Most visited

Recently visited

navigation
Added in API level 1

FileObserver

public abstract class FileObserver
extends Object

java.lang.Object
   ↳ android.os.FileObserver


Monitors files (using inotify) to fire an event after files are accessed or changed by by any process on the device (including this one). FileObserver is an abstract class; subclasses must implement the event handler onEvent(int, String).

Each FileObserver instance monitors a single file or directory. If a directory is monitored, events will be triggered for all files and subdirectories inside the monitored directory.

An event mask is used to specify which changes or actions to report. Event type constants are used to describe the possible changes in the event mask as well as what actually happened in event callbacks.

Warning: If a FileObserver is garbage collected, it will stop sending events. To ensure you keep receiving events, you must keep a reference to the FileObserver instance from some other live object.

Summary

Constants

int ACCESS

Event type: Data was read from a file

int ALL_EVENTS

Event mask: All valid event types, combined

int ATTRIB

Event type: Metadata (permissions, owner, timestamp) was changed explicitly

int CLOSE_NOWRITE

Event type: Someone had a file or directory open read-only, and closed it

int CLOSE_WRITE

Event type: Someone had a file or directory open for writing, and closed it

int CREATE

Event type: A new file or subdirectory was created under the monitored directory

int DELETE

Event type: A file was deleted from the monitored directory

int DELETE_SELF

Event type: The monitored file or directory was deleted; monitoring effectively stops

int MODIFY

Event type: Data was written to a file

int MOVED_FROM

Event type: A file or subdirectory was moved from the monitored directory

int MOVED_TO

Event type: A file or subdirectory was moved to the monitored directory

int MOVE_SELF

Event type: The monitored file or directory was moved; monitoring continues

int OPEN

Event type: A file or directory was opened

Public constructors

FileObserver(String path)

Equivalent to FileObserver(path, FileObserver.ALL_EVENTS).

FileObserver(String path, int mask)

Create a new file observer for a certain file or directory.

Public methods

abstract void onEvent(int event, String path)

The event handler, which must be implemented by subclasses.

void startWatching()

Start watching for events.

void stopWatching()

Stop watching for events.

Protected methods

void finalize()

Invoked when the garbage collector has detected that this instance is no longer reachable.

Inherited methods

From class java.lang.Object

Constants

ACCESS

Added in API level 1
int ACCESS

Event type: Data was read from a file

Constant Value: 1 (0x00000001)

ALL_EVENTS

Added in API level 1
int ALL_EVENTS

Event mask: All valid event types, combined

Constant Value: 4095 (0x00000fff)

ATTRIB

Added in API level 1
int ATTRIB

Event type: Metadata (permissions, owner, timestamp) was changed explicitly

Constant Value: 4 (0x00000004)

CLOSE_NOWRITE

Added in API level 1
int CLOSE_NOWRITE

Event type: Someone had a file or directory open read-only, and closed it

Constant Value: 16 (0x00000010)

CLOSE_WRITE

Added in API level 1
int CLOSE_WRITE

Event type: Someone had a file or directory open for writing, and closed it

Constant Value: 8 (0x00000008)

CREATE

Added in API level 1
int CREATE

Event type: A new file or subdirectory was created under the monitored directory

Constant Value: 256 (0x00000100)

DELETE

Added in API level 1
int DELETE

Event type: A file was deleted from the monitored directory

Constant Value: 512 (0x00000200)

DELETE_SELF

Added in API level 1
int DELETE_SELF

Event type: The monitored file or directory was deleted; monitoring effectively stops

Constant Value: 1024 (0x00000400)

MODIFY

Added in API level 1
int MODIFY

Event type: Data was written to a file

Constant Value: 2 (0x00000002)

MOVED_FROM

Added in API level 1
int MOVED_FROM

Event type: A file or subdirectory was moved from the monitored directory

Constant Value: 64 (0x00000040)

MOVED_TO

Added in API level 1
int MOVED_TO

Event type: A file or subdirectory was moved to the monitored directory

Constant Value: 128 (0x00000080)

MOVE_SELF

Added in API level 1
int MOVE_SELF

Event type: The monitored file or directory was moved; monitoring continues

Constant Value: 2048 (0x00000800)

OPEN

Added in API level 1
int OPEN

Event type: A file or directory was opened

Constant Value: 32 (0x00000020)

Public constructors

FileObserver

Added in API level 1
FileObserver (String path)

Equivalent to FileObserver(path, FileObserver.ALL_EVENTS).

Parameters
path String

FileObserver

Added in API level 1
FileObserver (String path, 
                int mask)

Create a new file observer for a certain file or directory. Monitoring does not start on creation! You must call startWatching() before you will receive events.

Parameters
path String: The file or directory to monitor
mask int: The event or events (added together) to watch for

Public methods

onEvent

Added in API level 1
void onEvent (int event, 
                String path)

The event handler, which must be implemented by subclasses.

This method is invoked on a special FileObserver thread. It runs independently of any threads, so take care to use appropriate synchronization! Consider using post(Runnable) to shift event handling work to the main thread to avoid concurrency problems.

Event handlers must not throw exceptions.

Parameters
event int: The type of event which happened
path String: The path, relative to the main monitored file or directory, of the file or directory which triggered the event

startWatching

Added in API level 1
void startWatching ()

Start watching for events. The monitored file or directory must exist at this time, or else no events will be reported (even if it appears later). If monitoring is already started, this call has no effect.

stopWatching

Added in API level 1
void stopWatching ()

Stop watching for events. Some events may be in process, so events may continue to be reported even after this method completes. If monitoring is already stopped, this call has no effect.

Protected methods

finalize

Added in API level 1
void finalize ()

Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.