|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.commons.io.monitor.FileAlterationObserver
public class FileAlterationObserver
FileAlterationObserver represents the state of files below a root directory, checking the filesystem and notifying listeners of create, change or delete events.
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(new File("."), "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:
// intialize observer.init(); ... // invoke as required observer.checkAndNotify(); ... observer.checkAndNotify(); ... // finished observer.finish();Alternatively, register the oberver(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();
FileFilter
s 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.
FileAlterationListener
,
FileAlterationMonitor
,
Serialized FormField Summary | |
---|---|
private java.util.Comparator<java.io.File> |
comparator
|
private java.io.FileFilter |
fileFilter
|
private java.util.List<FileAlterationListener> |
listeners
|
private FileEntry |
rootEntry
|
Constructor Summary | |
---|---|
|
FileAlterationObserver(java.io.File directory)
Construct an observer for the specified directory. |
protected |
FileAlterationObserver(FileEntry rootEntry,
java.io.FileFilter fileFilter,
IOCase caseSensitivity)
Construct an observer for the specified directory, file filter and file comparator. |
|
FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter)
Construct an observer for the specified directory and file filter. |
|
FileAlterationObserver(java.io.File directory,
java.io.FileFilter fileFilter,
IOCase caseSensitivity)
Construct an observer for the specified directory, file filter and file comparator. |
|
FileAlterationObserver(java.lang.String directoryName)
Construct an observer for the specified directory. |
|
FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter)
Construct an observer for the specified directory and file filter. |
|
FileAlterationObserver(java.lang.String directoryName,
java.io.FileFilter fileFilter,
IOCase caseSensitivity)
Construct an observer for the specified directory, file filter and file comparator. |
Method Summary | |
---|---|
void |
addListener(FileAlterationListener listener)
Add a file system listener. |
void |
checkAndNotify()
Check whether the file and its chlidren have been created, modified or deleted. |
private void |
checkAndNotify(FileEntry parent,
FileEntry[] previous,
java.io.File[] files)
Compare two file lists for files which have been created, modified or deleted. |
private FileEntry |
createFileEntry(FileEntry parent,
java.io.File file)
Create a new file entry for the specified file. |
void |
destroy()
Final processing. |
private void |
doCreate(FileEntry entry)
Fire directory/file created events to the registered listeners. |
private void |
doDelete(FileEntry entry)
Fire directory/file delete events to the registered listeners. |
private void |
doMatch(FileEntry entry,
java.io.File file)
Fire directory/file change events to the registered listeners. |
java.io.File |
getDirectory()
Return the directory being observed. |
java.lang.Iterable<FileAlterationListener> |
getListeners()
Returns the set of registered file system listeners. |
void |
initialize()
Initialize the observer. |
private java.io.File[] |
listFiles(java.io.File file)
List the contents of a directory |
void |
removeListener(FileAlterationListener listener)
Remove a file system listener. |
java.lang.String |
toString()
Provide a String representation of this observer. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private final java.util.List<FileAlterationListener> listeners
private final FileEntry rootEntry
private final java.io.FileFilter fileFilter
private final java.util.Comparator<java.io.File> comparator
Constructor Detail |
---|
public FileAlterationObserver(java.lang.String directoryName)
directoryName
- the name of the directory to observepublic FileAlterationObserver(java.lang.String directoryName, java.io.FileFilter fileFilter)
directoryName
- the name of the directory to observefileFilter
- The file filter or null if nonepublic FileAlterationObserver(java.lang.String directoryName, java.io.FileFilter fileFilter, IOCase caseSensitivity)
directoryName
- the name of the directory to observefileFilter
- The file filter or null if nonecaseSensitivity
- what case sensitivity to use comparing file names, null means system sensitivepublic FileAlterationObserver(java.io.File directory)
directory
- the directory to observepublic FileAlterationObserver(java.io.File directory, java.io.FileFilter fileFilter)
directory
- the directory to observefileFilter
- The file filter or null if nonepublic FileAlterationObserver(java.io.File directory, java.io.FileFilter fileFilter, IOCase caseSensitivity)
directory
- the directory to observefileFilter
- The file filter or null if nonecaseSensitivity
- what case sensitivity to use comparing file names, null means system sensitiveprotected FileAlterationObserver(FileEntry rootEntry, java.io.FileFilter fileFilter, IOCase caseSensitivity)
rootEntry
- the root directory to observefileFilter
- The file filter or null if nonecaseSensitivity
- what case sensitivity to use comparing file names, null means system sensitiveMethod Detail |
---|
public java.io.File getDirectory()
public void addListener(FileAlterationListener listener)
listener
- The file system listenerpublic void removeListener(FileAlterationListener listener)
listener
- The file system listenerpublic java.lang.Iterable<FileAlterationListener> getListeners()
public void initialize() throws java.lang.Exception
java.lang.Exception
- if an error occurspublic void destroy() throws java.lang.Exception
java.lang.Exception
- if an error occurspublic void checkAndNotify()
private void checkAndNotify(FileEntry parent, FileEntry[] previous, java.io.File[] files)
parent
- The parent entryprevious
- The original list of filesfiles
- The current list of filesprivate FileEntry createFileEntry(FileEntry parent, java.io.File file)
parent
- The parent file entryfile
- The file to create an entry for
private void doCreate(FileEntry entry)
entry
- The file entryprivate void doMatch(FileEntry entry, java.io.File file)
entry
- The previous file system entryfile
- The current fileprivate void doDelete(FileEntry entry)
entry
- The file entryprivate java.io.File[] listFiles(java.io.File file)
file
- The file to list the contents of
public java.lang.String toString()
toString
in class java.lang.Object
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |