But there isn't an implementation that permits to watch a single file so.. follows a my implementation called FileWatcher:
import java.io.IOException; import java.nio.file.*; import static java.nio.file.StandardWatchEventKinds.*; public class FileWatcher implements Runnable{ private final WatchService watcher; private Path fileToWatch; public FileWatcher(String filePath) throws IOException { Path path = Paths.get(filePath); this.fileToWatch = path.getFileName(); path.getParent().register(watcher, ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY); } @Override public void run() { for (;;) { // wait for key to be signaled WatchKey key; try { key = watcher.take(); } catch (InterruptedException x) { return; } for (WatchEvent event: key.pollEvents()) { WatchEvent.Kind kind = event.kind(); if (kind == OVERFLOW) continue; // The filename is the // context of the event. @SuppressWarnings("unchecked") Path fileName = ((WatchEvent)event).context(); if(!fileName.equals(fileToWatch)) continue; if(kind == ENTRY_CREATE) create(); if(kind == ENTRY_DELETE) delete(); if(kind == ENTRY_MODIFY) modify(); } // Reset the key -- this step is critical if you want to // receive further watch events. If the key is no longer valid, // the directory is inaccessible so exit the loop. boolean valid = key.reset(); if (!valid) { break; } } } public void modify() {} public void delete() {} public void create() {} }
An example of use:
new Thread(new FileWatcher(filePath){ @Override public void modify() { System.out.println("modified"); } }).start();
Nessun commento:
Posta un commento