Java 7 – Neues Dateisystem Event Handling hinzugekommen

Java 7 bietet eine Möglichkeit auf Events von dem nativen Dateisystem zu lauschen und gegebenenfalls darauf zu reagieren.

Folgender Code soll diese Möglichkeit demonstrieren:

package de.oio.java;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKind;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

public class FileSystemEvents extends Thread {

    public static void main(String[] args) {

        Thread thread = new FileSystemEvents();
        thread.start();
    }

    @Override
    public void run() {
        Path myDir = Paths.get("C:/");
        try {
            WatchService watcher = myDir.getFileSystem().newWatchService();
            myDir.register(watcher, StandardWatchEventKind.ENTRY_CREATE,
                    StandardWatchEventKind.ENTRY_DELETE,
                    StandardWatchEventKind.ENTRY_MODIFY);

            while (true) { // Abbruchbedingung für das kontinuierliche Lauschen
                            // auf das Dateisystem
                WatchKey watchKey = watcher.take();
                List events = watchKey.pollEvents();
                for (WatchEvent event : events) {
                    if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) {
                        System.out.println("Created: "
                                + event.context().toString());
                    }
                    if (event.kind() == StandardWatchEventKind.ENTRY_DELETE) {
                        System.out.println("Delete: "
                                + event.context().toString());
                    }
                    if (event.kind() == StandardWatchEventKind.ENTRY_MODIFY) {
                        System.out.println("Modify: "
                                + event.context().toString());
                    }
                }
                watchKey.reset();
            }
        } catch (Exception e) {
            System.out.println("Error: " + e.toString());
        }
    }
}

In dem Beispiel wird JDK 1.7 vorausgesetzt. Denn erst damit werden die java.nio.* Packages mitgeliefert.

Das Event Handling Model basiert hier nicht auf das von Swing. Deshalb ist für das asynchrone Lauschen ein eigener Thread notwendig, damit die Anwendung nach dem Aufruf von watchKey.pollEvents() nicht einfriert.

Short URL for this post: http://wp.me/p4nxik-uk
This entry was posted in Java Basics and tagged . Bookmark the permalink.

3 Responses to Java 7 – Neues Dateisystem Event Handling hinzugekommen

  1. Pingback: Java 7 – Neues Dateisystem Event Handling hinzugekommen

  2. Simon says:

    Hallo Vladislav Chumak,

    ist noch eine Zusammenfassung der Erneuerungen bei Java7 zu erwarten?

    Grüße,
    Simon

    • Hallo Simon, Es würde mir viel Freude bereiten, solchen Artikel verfassen zu dürfen. Das werde ich höchstwahrscheinlich auch tun. Allerdings frühestens in 2 Monaten, da mir momentan die Zeit fehlt.

      Mit freundlichen Grüßen

      Vladislav

Leave a Reply