Zum Inhalt springen

[JDK7]WatchService: Absoluter Pfad


Aliter

Empfohlene Beiträge

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... :D

Vielen Dank,

Aliter

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...