public class FileAlterationObserver
extends java.lang.Object
implements java.io.Serializable
To use this implementation:
FileAlterationListener implementation(s) that process the file/directory create, change and delete eventsFileAlterationObserver for the appropriate directory.FileAlterationMonitor or run manually.FileAlterationObserver for the directory and register the listeners:
File directory = new File(FileUtils.current(), "src");
FileAlterationObserver observer = new FileAlterationObserver(directory);
observer.addListener(...);
observer.addListener(...);
To manually observe a directory, initialize the observer and invoked the checkAndNotify() method as required:
// initialize
observer.init();
...
// invoke as required
observer.checkAndNotify();
...
observer.checkAndNotify();
...
// finished
observer.finish();
Alternatively, register the observer(s) with a FileAlterationMonitor, which creates a new thread, invoking the observer at the specified interval:
long interval = ...
FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);
monitor.start();
...
monitor.stop();
FileFilters to observe only the files and/or directories
that are of interest. This makes it more efficient and reduces the noise from unwanted file system events.
Commons IO has a good range of useful, ready-made File Filter implementations for this purpose.
For example, to only observe 1) visible directories and 2) files with a ".java" suffix in a root directory called "src" you could set up a
FileAlterationObserver in the following way:
// Create a FileFilter
IOFileFilter directories = FileFilterUtils.and(
FileFilterUtils.directoryFileFilter(),
HiddenFileFilter.VISIBLE);
IOFileFilter files = FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".java"));
IOFileFilter filter = FileFilterUtils.or(directories, files);
// Create the File system observer and register File Listeners
FileAlterationObserver observer = new FileAlterationObserver(new File("src"), filter);
observer.addListener(...);
observer.addListener(...);
FileEntry represents the state of a file or directory, capturing File attributes at a point in time. Custom
implementations of FileEntry can be used to capture additional properties that the basic implementation does not support. The
FileEntry.refresh(File) method is used to determine if a file or directory has changed since the last check and stores the current state of the
File's properties.
Serialization is deprecated and will be removed in 3.0.
FileAlterationListener,
FileAlterationMonitor,
Serialized Form| Modifier and Type | Field and Description |
|---|---|
private java.util.Comparator<java.io.File> |
comparator
Compares file names.
|
private java.io.FileFilter |
fileFilter
The file filter or null if none.
|
private java.util.List<FileAlterationListener> |
listeners
List of listeners.
|
private FileEntry |
rootEntry
The root directory to observe.
|
private static long |
serialVersionUID |
| Modifier | Constructor and Description |
|---|---|
|
FileAlterationObserver(java.io.File directory)
Constructs an observer for the specified directory.
|
private |
FileAlterationObserver(FileEntry rootEntry,
java.io.FileFilter fileFilter,
java.util.Comparator<java.io.File> comparator)
Constructs an observer for the specified directory, file filter and file comparator.
|
protected |
FileAlterationObserver(FileEntry rootEntry,
java.io.FileFilter fileFilter,
IOCase ioCase)
Constructs an observer for the specified directory, file filter and file comparator.
|
|
FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter)
Constructs an observer for the specified directory and file filter.
|
|
FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter,
IOCase ioCase)
Constructs an observer for the specified directory, file filter and file comparator.
|
|
FileAlterationObserver(java.lang.String directoryName)
Constructs an observer for the specified directory.
|
|
FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter)
Constructs an observer for the specified directory and file filter.
|
|
FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter,
IOCase ioCase)
Constructs an observer for the specified directory, file filter and file comparator.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addListener(FileAlterationListener listener)
Adds a file system listener.
|
private void |
checkAndFire(FileEntry parentEntry,
FileEntry[] previousEntries,
java.io.File[] currentEntries)
Compares two file lists for files which have been created, modified or deleted.
|
void |
checkAndNotify()
Checks whether the file and its children have been created, modified or deleted.
|
private FileEntry |
createFileEntry(FileEntry parent,
java.io.File file)
Creates a new file entry for the specified file.
|
void |
destroy()
Final processing.
|
private void |
fireOnChange(FileEntry entry,
java.io.File file)
Fires directory/file change events to the registered listeners.
|
private void |
fireOnCreate(FileEntry entry)
Fires directory/file created events to the registered listeners.
|
private void |
fireOnDelete(FileEntry entry)
Fires directory/file delete events to the registered listeners.
|
java.io.File |
getDirectory()
Returns the directory being observed.
|
java.io.FileFilter |
getFileFilter()
Returns the fileFilter.
|
java.lang.Iterable<FileAlterationListener> |
getListeners()
Returns the set of registered file system listeners.
|
void |
initialize()
Initializes the observer.
|
private FileEntry[] |
listFileEntries(java.io.File file,
FileEntry entry)
Lists the file entries in
file. |
private java.io.File[] |
listFiles(java.io.File directory)
Lists the contents of a directory.
|
void |
removeListener(FileAlterationListener listener)
Removes a file system listener.
|
private java.io.File[] |
sort(java.io.File[] files) |
private static java.util.Comparator<java.io.File> |
toComparator(IOCase ioCase) |
java.lang.String |
toString()
Returns a String representation of this observer.
|
private static final long serialVersionUID
private final transient java.util.List<FileAlterationListener> listeners
private final FileEntry rootEntry
private final transient java.io.FileFilter fileFilter
private final java.util.Comparator<java.io.File> comparator
public FileAlterationObserver(java.io.File directory)
directory - the directory to observe.public FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter)
directory - the directory to observe.fileFilter - The file filter or null if none.public FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter,
IOCase ioCase)
directory - the directory to observe.fileFilter - The file filter or null if none.ioCase - what case sensitivity to use comparing file names, null means system sensitive.private FileAlterationObserver(FileEntry rootEntry, java.io.FileFilter fileFilter, java.util.Comparator<java.io.File> comparator)
rootEntry - the root directory to observe.fileFilter - The file filter or null if none.comparator - how to compare files.protected FileAlterationObserver(FileEntry rootEntry, java.io.FileFilter fileFilter, IOCase ioCase)
rootEntry - the root directory to observe.fileFilter - The file filter or null if none.ioCase - what case sensitivity to use comparing file names, null means system sensitive.public FileAlterationObserver(java.lang.String directoryName)
directoryName - the name of the directory to observe.public FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter)
directoryName - the name of the directory to observe.fileFilter - The file filter or null if none.public FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter,
IOCase ioCase)
directoryName - the name of the directory to observe.fileFilter - The file filter or null if none.ioCase - what case sensitivity to use comparing file names, null means system sensitive.private static java.util.Comparator<java.io.File> toComparator(IOCase ioCase)
public void addListener(FileAlterationListener listener)
listener - The file system listener.private void checkAndFire(FileEntry parentEntry, FileEntry[] previousEntries, java.io.File[] currentEntries)
parentEntry - The parent entry.previousEntries - The original list of file entries.currentEntries - The current list of files entries.public void checkAndNotify()
private FileEntry createFileEntry(FileEntry parent, java.io.File file)
parent - The parent file entry.file - The file to wrap.public void destroy()
throws java.lang.Exception
java.lang.Exception - if an error occurs.private void fireOnChange(FileEntry entry, java.io.File file)
entry - The previous file system entry.file - The current file.private void fireOnCreate(FileEntry entry)
entry - The file entry.private void fireOnDelete(FileEntry entry)
entry - The file entry.public java.io.File getDirectory()
public java.io.FileFilter getFileFilter()
public java.lang.Iterable<FileAlterationListener> getListeners()
public void initialize()
throws java.lang.Exception
java.lang.Exception - if an error occurs.private FileEntry[] listFileEntries(java.io.File file, FileEntry entry)
file.file - The directory to list.entry - the parent entry.private java.io.File[] listFiles(java.io.File directory)
directory - The directory to list.public void removeListener(FileAlterationListener listener)
listener - The file system listener.private java.io.File[] sort(java.io.File[] files)
public java.lang.String toString()
toString in class java.lang.Object