public class DefaultFileMonitor extends java.lang.Object implements java.lang.Runnable, FileMonitor
FileMonitor
implementation.
The DefaultFileMonitor is a Thread based polling file system monitor with a 1 second delay.
New files are detected during each "check" as each file does a check for new children. If new children are found, create events are fired recursively if recursive descent is enabled.
For performance reasons, added a delay that increases as the number of files monitored increases. The default is a delay of 1 second for every 1000 files processed.
FileSystemManager fsManager = VFS.getManager(); FileObject listendir = fsManager.resolveFile("/home/username/monitored/"); DefaultFileMonitor fm = new DefaultFileMonitor(new CustomFileListener()); fm.setRecursive(true); fm.addFile(listendir); fm.start();(where CustomFileListener is a class that implements the FileListener interface.)
Modifier and Type | Class and Description |
---|---|
private static class |
DefaultFileMonitor.FileMonitorAgent
File monitor agent.
|
Modifier and Type | Field and Description |
---|---|
private java.util.Stack<FileObject> |
addStack
File objects to be added to the monitor map.
|
private int |
checksPerRun
Set the number of files to check until a delay will be inserted
|
private static long |
DEFAULT_DELAY |
private static int |
DEFAULT_MAX_FILES |
private long |
delay
Set the delay between checks
|
private java.util.Stack<FileObject> |
deleteStack
File objects to be removed from the monitor map.
|
private FileListener |
listener
A listener object that if set, is notified on file creation and deletion.
|
private static org.apache.commons.logging.Log |
LOG |
private java.util.Map<FileName,DefaultFileMonitor.FileMonitorAgent> |
monitorMap
Map from FileName to FileObject being monitored.
|
private java.lang.Thread |
monitorThread
The low priority thread used for checking the files being monitored.
|
private boolean |
recursive
A flag used to determine if adding files to be monitored should be recursive.
|
private boolean |
shouldRun
A flag used to determine if the monitor thread should be running.
|
Constructor and Description |
---|
DefaultFileMonitor(FileListener listener) |
Modifier and Type | Method and Description |
---|---|
void |
addFile(FileObject file)
Adds a file to be monitored.
|
private void |
doAddFile(FileObject file)
Adds a file to be monitored.
|
int |
getChecksPerRun()
get the number of files to check per run.
|
long |
getDelay()
Get the delay between runs.
|
(package private) FileListener |
getFileListener()
Access method to get the current FileListener object notified when there
are changes with the files added.
|
boolean |
isRecursive()
Access method to get the recursive setting when adding files for monitoring.
|
protected void |
queueAddFile(FileObject file)
Queues a file for addition to be monitored.
|
protected void |
queueRemoveFile(FileObject file)
Queues a file for removal from being monitored.
|
void |
removeFile(FileObject file)
Removes a file from being monitored.
|
void |
run()
Asks the agent for each file being monitored to check its file for changes.
|
void |
setChecksPerRun(int checksPerRun)
set the number of files to check per run.
|
void |
setDelay(long delay)
Set the delay between runs.
|
void |
setRecursive(boolean newRecursive)
Access method to set the recursive setting when adding files for monitoring.
|
void |
start()
Starts monitoring the files that have been added.
|
void |
stop()
Stops monitoring the files that have been added.
|
private static final org.apache.commons.logging.Log LOG
private static final long DEFAULT_DELAY
private static final int DEFAULT_MAX_FILES
private final java.util.Map<FileName,DefaultFileMonitor.FileMonitorAgent> monitorMap
private java.lang.Thread monitorThread
private final java.util.Stack<FileObject> deleteStack
private final java.util.Stack<FileObject> addStack
private volatile boolean shouldRun
private boolean recursive
private long delay
private int checksPerRun
private final FileListener listener
public DefaultFileMonitor(FileListener listener)
public boolean isRecursive()
public void setRecursive(boolean newRecursive)
newRecursive
- true if monitoring should be enabled for children.FileListener getFileListener()
public void addFile(FileObject file)
addFile
in interface FileMonitor
file
- The FileObject to monitor.private void doAddFile(FileObject file)
file
- The FileObject to add.public void removeFile(FileObject file)
removeFile
in interface FileMonitor
file
- The FileObject to remove from monitoring.protected void queueRemoveFile(FileObject file)
file
- The FileObject to be removed from being monitored.public long getDelay()
public void setDelay(long delay)
delay
- The delay period.public int getChecksPerRun()
public void setChecksPerRun(int checksPerRun)
checksPerRun
- a value less than 1 will disable this featureprotected void queueAddFile(FileObject file)
file
- The FileObject to add.public void start()
public void stop()
public void run()
run
in interface java.lang.Runnable