I want to watch some directory for changes and her subdirectories. I tried to do this with WatchService
but I can't know from which directory the file was changed. How can I retrieve the full path from the WatchEvent
?
Generally you provide the directory name of the file when starting the watchservice. Here is a tutorial demonstrating how that works:
http://blogs.oracle.com/thejavatutorials/entry/watching_a_directory_for_changes
From the tutorial:
Path dir = ...;
try {
WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
}[.....]
when you catch a notification:
//The filename is the context of the event.
WatchEvent<Path> ev = (WatchEvent<Path>)event;
Path filename = ev.context();
Path child = dir.resolve(filename);
For users who use Spring:
With Spring 4.2 WatchServiceDirectoryScanner is introduced. Now it can also catch sub directory changes.
For more information, Javadocs on WatchServiceDirectoryScanner
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With