Reputation: 91
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
?
Upvotes: 9
Views: 4799
Reputation: 3392
Generally you provide the directory name of the file when starting the watchservice. Here is a tutorial demonstrating how that works:
https://docs.oracle.com/javase/tutorial/essential/io/notification.html https://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java
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);
Upvotes: 2
Reputation: 770
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
Upvotes: 1