fonet
fonet

Reputation: 91

How can I watch subdirectory for changes with WatchService? (Java)

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

Answers (2)

patrickmdnet
patrickmdnet

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

nurgasemetey
nurgasemetey

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

Related Questions