Hallo,
ich lade mir eine Datei via Firefox auf den Rechner und verarbeite die Datei nach dem Download weiter. Dazu habe ich mir den WatchService angeschaut. Aufgefallen ist mir, dass durch den Download immer 2 mal der Event “Create” ausgelöst wird.
Da ich diesen Event für weitere Aktionen nutze hab ich “quick and dirty” den Zähler count in mein Programm eingebaut.
Mein Problem ist aber, dass ich den Poller nur auf key = watcher.take()
setzen kann.
key = watcher.poll(2000, TimeUnit.MILLISECONDS);
liefert einen Runtime Error.
Kann mir jemand sagen, was ich da falsch mache?
ich bekomme beim Start des Programmes eine NullPointerException. Im Verzeichnis findet sich beim Programmstart keine Datei.
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.TimeUnit;
public class TestWatcherService {
public static void main(String[] args) throws InterruptedException {
try {
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("H:/Inspool");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
System.out.println("Watch Service registered for dir: " + dir.getFileName());
WatchKey key;
int count = 0;
while (true) {
//*key = watcher.take();
key = watcher.poll(2000, TimeUnit.MILLISECONDS);
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
@SuppressWarnings("unchecked")
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();
if (kind == ENTRY_CREATE) {
count ++;
if (count == 2) {
System.out.println(kind.name() + ": "+count + ". " + fileName);
}
}
if (kind == ENTRY_MODIFY) {
key.reset();
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
} catch (IOException ex) {
System.err.println(ex);
}
}
}```
Danke
GGK