[JAVA] Ich möchte eine bestimmte Datei mit WatchService überwachen

Wenn Sie beispielsweise möchten, dass "WatchService" erkennt, dass sich "dir \ file.txt" geändert hat, möchten Sie Code wie diesen schreiben, der eine Laufzeitausnahme auslöst ("NotDirectoryException").

var file = Paths.get("dir", "file.txt");
var watcher = FileSystems.getDefault().newWatchService();
file.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

[JavaDoc von Path :: register](https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Path.html#register-java.nio.file.WatchService Wie Sie in -java.nio.file.WatchEvent.Kind: A-java.nio.file.WatchEvent.Modifier ...-) sehen können, ist das Registrierungsziel von "WatchService" ein Verzeichnis. Alternativ kann gesagt werden, dass "WatchService" die Ereignisse überwacht, die in den Dateien und Verzeichnissen unter dem registrierten Verzeichnis auftreten. Wenn Sie daher nur die Ereignisse einer bestimmten Datei erkennen möchten, müssen Sie beispielsweise Folgendes festlegen.

var file = Paths.get("dir", "file.txt");
var directory = file.getParent();
var watcher = FileSystems.getDefault().newWatchService();
directory.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

//Datei bis zur Unterbrechung durch Interrupt etc..Überwachen Sie txt weiter.
while (true) {
    var watchKey = watcher.take();
    for (var event : watchKey.pollEvents()) {
        var modified = (Path) event.context();
        if (modified.equals(file.getFileName())) {
            // Do Something
        }
    }
}

Informationen zu dem Eintrag, bei dem das Ereignis aufgetreten ist, erhalten Sie mit "WatchEvent :: context". Der Rückgabewert von "WatchEvent :: context" ist "Object", aber in Wirklichkeit wird ein "Path" -Objekt zurückgegeben, sodass es im obigen Beispiel als Variable "modifiziert" umgewandelt wird.

Außerdem ist das in "modifiziert" gespeicherte "Pfad" -Objekt ein relativer Pfad aus dem in "WatchService" registrierten Verzeichnis. Kurz gesagt, es ist "var modifiziert = Paths.get (" file.txt ");", daher müssen Sie beim Vergleich mit "gleich" usw. vorsichtig sein.

Recommended Posts

Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich möchte eine Webanwendung entwickeln!
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte die Generierung / Öffnung einer Protokolldatei mit log4j # FileAppender verknüpfen
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte einen Unit Test schreiben!
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Scraping und Schreiben bestimmter Elemente in eine Datei
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
Ich möchte mit Firestore von Rails spielen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
[Rails] Ich möchte CSS mit Webpacker laden
Ich möchte eine Servlet-War-Datei mit OpenJDK unter CentOS7 erstellen. Ohne mvn. Ohne Internetverbindung.
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Ich möchte ContainerRelativeShape nur auf bestimmte Ecken anwenden [SwiftUI]
Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
Ich möchte eine Funktion in der Rails Console definieren
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
Ich möchte Zeichen konvertieren ...
So fordern Sie mit jMeter eine CSV-Datei als JSON an
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine mit Rails 6 erstellte App an GitHub senden