Aliter Geschrieben 4. November 2011 Teilen Geschrieben 4. November 2011 Hallo! Ich versuche mich gerade an dem neuen WatchService im JDK7. Anhand vom Beispiel auf Oracle.com habe ich das implementiert: /** * @param args the command line arguments */ public static void main(String[] args) { try { WatchService watcher = FileSystems.getDefault().newWatchService(); WatchKey watchKey = Paths.get("C:/test/").register(watcher, new Kind<?>[] { StandardWatchEventKinds.ENTRY_CREATE}); while(true) { System.out.println("Waiting for Event"); watchKey = watcher.take(); for(WatchEvent event : watchKey.pollEvents()) { WatchEvent.Kind<?> kind = event.kind(); if(kind == StandardWatchEventKinds.OVERFLOW) { continue; } System.out.println("Event fired: " + kind); Path p = (Path) event.context(); System.out.println("Path: " + p.toAbsolutePath()); } if(!watchKey.reset()) { System.err.println("Fehler im Pfad"); watchKey.cancel(); watcher.close(); break; } } } catch (IOException ex) { Logger.getLogger(SWISReport.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(SWISReport.class.getName()).log(Level.SEVERE, null, ex); } } Wenn ich den absoluten Pfad der Datei ausgeben will, erhalte ich <Projektpfad>\<Gefundene-Datei>: Waiting for Event Event fired: ENTRY_CREATE Path: C:\Projekte\WatchServiceTest\test.xml Die gefundene Datei liegt aber, wie im "Paths.get()" angegeben, im Verzeichnis "C:/test/". Hat jemand eine Idee wie man den korrekten Pfad ermittelt? Vielleicht steh' ich auch einfach aufm Schlauch... Vielen Dank, Aliter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 4. November 2011 Teilen Geschrieben 4. November 2011 Hi, hast du es mit folgendem probiert, was in deinem verlinkten Artikel von Oracle genannt wurde: Path filename = ev.context(); Path child = dir.resolve(filename); Wobei dir ein Path Objekt ist, welches auf den Pfad zeigt den dein WatchService beobachtet. Ich kann es bei mir gerade nicht testen, da ich kein JDK 7 zur Verfügung habe, aber kann mir vorstellen, dass die gemeldete Datei im Path Objekt nur als relativer Pfad, also nur der Dateiname angegeben ist. Wenn du von ihm aber explizit einen Absoluten Pfad verlangst, erwartet er die Datei im aktuellen Arbeitsverzeichnis, in deinem Fall "C:\Projekte\WatchServiceTest" und gibt den absoluten Pfad dann auch so aus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aliter Geschrieben 5. November 2011 Autor Teilen Geschrieben 5. November 2011 Tatsächlich, das wars- danke. Hier zur Vollständigkeit halber der Code, mit den geänderten Stellen: public static void main(String[] args) { try { WatchService watcher = FileSystems.getDefault().newWatchService(); [B][SIZE="4"]Path watchDir = Paths.get("C:/test/");[/SIZE][/B] WatchKey watchKey = watchDir.register(watcher, new Kind<?>[] { StandardWatchEventKinds.ENTRY_CREATE}); while(true) { System.out.println("Waiting for Event"); watchKey = watcher.take(); for(WatchEvent event : watchKey.pollEvents()) { WatchEvent.Kind<?> kind = event.kind(); if(kind == StandardWatchEventKinds.OVERFLOW) { continue; } System.out.println("Event fired: " + kind); [B][SIZE="4"]Path p = watchDir.resolve( (Path) event.context());[/SIZE][/B] System.out.println("Path: " + p.toAbsolutePath()); } if(!watchKey.reset()) { System.err.println("Fehler im Pfad"); watchKey.cancel(); watcher.close(); break; } } } catch (IOException ex) { Logger.getLogger(WebServiceTest.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(WebServiceTest.class.getName()).log(Level.SEVERE, null, ex); } } Und die korrekte Ausgabe: Waiting for Event Event fired: ENTRY_CREATE Path: C:\test\IMG_0811.jpg Waiting for Event Grüße Aliter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.