NIO.2 Überprüfung von Java

Überprüfen Sie nach Java IO und NIO NIO.2. !!

IO : https://qiita.com/liguofeng29/items/e08dc21b16c0057f601e NIO : https://qiita.com/liguofeng29/items/c827af3d62f219e17755

Was ist NIO.2?

Einfach ausgedrückt ist es eine Verbesserung gegenüber dem bestehenden NIO.

  1. Erweitertes FileIO
  2. Erweiterte E / A basierend auf asynchronem Kanal

FileIO-Erweiterung

Kern-API

API-Name Überblick
Path Stellt eine plattformunabhängige Route dar
Paths Pfad-Dienstprogrammklasse
(Für die Erfassung von Pfadinstanzen(get)War nur eine Methode)
Files Datei-Dienstprogrammklasse

Chat: Pfade und Dateien folgen den einheitlichen Namensregeln von Java.

Path, Paths

Pfadprobe(Ich wollte es mit Abschlag bekommen)


private static void showPath(Path path) {
    System.out.println("|Erfassungsinhalte|Ergebnis|");
    System.out.println("|---|---|");
    System.out.printf("|%s | %s |\r\n", "Elementanzahl", path.getNameCount());
    System.out.printf("|%s | %s |\r\n", "Angegebener Elementname", path.getName(0));
    System.out.printf("|%s | %s |\r\n", "Dateiname", path.getFileName());
    System.out.printf("|%s | %s |\r\n", "Name des Dateisystems", path.getFileSystem());
    System.out.printf("|%s | %s |\r\n", "Elternteil", path.getParent());
    System.out.printf("|%s | %s |\r\n", "Wurzel", path.getRoot());
    System.out.printf("|%s | %s |\r\n", "Ist es ein absoluter Pass?", path.isAbsolute());
}

Path,Paths


private static void path_test() {
    //Relativer Pfad
    Path relativePath = Paths.get(".", "NIO2", "sub", "nio2-file.txt");
    System.out.println("----Relativer Pfad----");
    showPath(relativePath);
    //Absoluter Pfad
    System.out.println("----Absoluter Pfad----");
    showPath(relativePath.toAbsolutePath());
}
Erfassungsinhalte Ergebnis
Elementanzahl 4
Angegebener Elementname .
Dateiname nio2-file.txt
Name des Dateisystems sun.nio.fs.WindowsFileSystem@6e0be858
Elternteil .\NIO2\sub
Wurzel null
Ist es ein absoluter Pass? false
Erfassungsinhalte Ergebnis
Elementanzahl 8
Angegebener Elementname workspace
Dateiname nio2-file.txt
Name des Dateisystems sun.nio.fs.WindowsFileSystem@6e0be858
Elternteil C:\workspace\git\java-projects\java-sample.\NIO2\sub
Wurzel C:\
Ist es ein absoluter Pass? true
  1. Das zu erhaltende Ergebnis hängt vom absoluten und relativen Pfad ab.
  2. sun.nio.fs.WindowsFileSystem, wodurch __ "plattformunabhängig" __ wird?
  3. Holen Sie sich eine Pfadinstanz von Paths # get (__Datei zu Pfad, Pfad zu Datei ist ebenfalls möglich __)

Files

Beispiel für Dateien

nio2-src.txt


1. Zeile, AIC
Zweite Zeile, UTF-8?
3. Zeile

Beispiel für Dateien(Ich wollte es mit Abschlag bekommen)


private static void testFiles(Path path) {
    System.out.println("|Erfassungsinhalte|Ergebnis|");
    System.out.println("|---|---|");
    try {
        System.out.printf("|%s | %s |\r\n", "Ist es ein Verzeichnis?", Files.isDirectory(path));
        System.out.printf("|%s | %s |\r\n", "Versteckt", Files.isHidden(path));
        System.out.printf("|%s | %s |\r\n", "Ist es ein Verzeichnis?", Files.isWritable(path));
        System.out.printf("|%s | %s |\r\n", "Die Größe ist", Files.size(path));
        System.out.printf("|%s | " , "Dateiinhalt abrufen");
        Files.lines(path).forEach(line -> {
            System.out.printf("%s<br>" , line);
        });
        System.out.printf("|\r\n");
        System.out.printf("|%s | " , "Verzeichniselemente abrufen");
        Files.list(path.getParent()).forEach(p -> {
            System.out.printf("%s<br>" , p);
        });
        System.out.printf("|\r\n");
        System.out.printf("|%s | %s |\r\n", "Speicherkapazität", Files.getFileStore(path).getTotalSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Verfügbare Kapazität", Files.getFileStore(path).getUsableSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Nicht zugewiesene Kapazität", Files.getFileStore(path).getUnallocatedSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Existiert es", Files.exists(path));
        Files.delete(path);
        System.out.printf("|%s | %s |\r\n", "löschen", "Gelöscht");
        System.out.printf("|%s | %s |\r\n", "Existiert es", Files.exists(path));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Erfassungsinhalte Ergebnis
Ist es ein Verzeichnis? false
Versteckt false
Ist es ein Verzeichnis? true
Die Größe ist 64
Dateiinhalt abrufen 1. Zeile, AIC
Zweite Zeile, UTF-8?
3. Zeile
Verzeichniselemente abrufen .\NIO2\nio2-desc.txt
.\NIO2\nio2-src.txt
.\NIO2\sub
Speicherkapazität 111GB
Verfügbare Kapazität 54GB
Nicht zugewiesene Kapazität 54GB
Existiert es true
löschen Gelöscht
Existiert es false

File#WalkTree Bei vorhandenen E / A musste ich das rekursive Scannen selbst implementieren, und der Code war kompliziert und nicht einfach zu verwenden.

In 1.7 ermöglicht Files # walkFileTree das rekursive Scannen.

callback Überblick
preVisitDirectory Tritt vor dem Verzeichniszugriff auf
visitFile Tritt vor dem Verzeichniszugriff auf
visitFileFailed Tritt vor dem Verzeichniszugriff auf
postVisitDirectory Tritt nach dem Verzeichniszugriff auf
FileVisitResult Überblick
CONTINUE fortsetzen
SKIP_SIBLINGS Nach dem Fortfahren die entsprechende Datei,Scannen Sie nicht die Geschwisterhierarchie des Verzeichnisses
SKIP_SUBTREE Nach dem Fortfahren die entsprechende Datei,Scannen Sie nicht die untergeordnete Verzeichnishierarchie
TERMINATE walk(Scannen)Beenden

Es gab hier und da Beispiele von walkFileTree, also werde ich sie weglassen!

Files#walk In 1.8 ist Files # walk praktisch!

Files.walk


Files.walk(Paths.get(".", "NIO2"), FileVisitOption.FOLLOW_LINKS)
    //Verzeichnis und Datei tauschen
    .sorted(Comparator.reverseOrder())
    //Bestätigung des Löschziels
    .peek(System.out::println)
    //Löschen
    .forEach(path -> {
        try {
            Files.delete(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    });

Andere

WatchService Es ist ein Mechanismus zum Überwachen von Dateiänderungen. In traditioneller Weise ist die mögliche Implementierung

  1. Starten Sie einen anderen Thread
  2. Speichern Sie den Status
  3. Scannen Sie in regelmäßigen Abständen und vergleichen Sie mit dem vorherigen Status

WatchService erleichtert das Erstellen von Dateien.

WatchService-Beispiel


try {
    WatchService watchService = FileSystems.getDefault().newWatchService();
    Paths.get(".").register(
        watchService,
        StandardWatchEventKinds.ENTRY_CREATE, //CREATE-Monitor
        StandardWatchEventKinds.ENTRY_DELETE, //Überwachung LÖSCHEN
        StandardWatchEventKinds.ENTRY_MODIFY  //Überwachung ändern
    );
    System.out.println("-----Uhr starten-----");
    while (true) {
        //Warte noch
        WatchKey key = watchService.take();
        key.pollEvents().stream()
            .forEach(
                watchEvent -> {
                    System.out.println("Art des Auftretens: " + watchEvent.kind().name());
                    System.out.println("Zielname: " + watchEvent.context());
                });
        //Nächste Überwachung
        if (!key.reset()) {
            break;
        }
    }
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}
  1. Generieren Sie WatchService
  2. Registrieren Sie WatchService und überwachen Sie den Inhalt
  3. Holen Sie sich WatchKey
  1. Verarbeitung
  2. WatchKey zurücksetzen

Attribut lesen / schreiben

In etwa handelt es sich um eine Implementierung von FileAttributeView, und es scheint, dass Sie detaillierte Attribute bedienen können.

BasicFileAttributeView-Beispiel


Path path = Paths.get(".", "NIO2", "nio2-src.txt");

BasicFileAttributeView view = Files.getFileAttributeView(path, BasicFileAttributeView.class);
BasicFileAttributes attributes = view.readAttributes();

System.out.println("Letzter Zugriff: " + attributes.lastAccessTime());
System.out.println("Letzte Korrekturzeit: " + attributes.lastModifiedTime());

Recommended Posts

NIO.2 Überprüfung von Java
NIO Bewertung von Java
Bewertung von Java Shilber
Überprüfungshinweise zu Java NIO 2
Java-Überprüfung
Java IO Bewertung
[Java] Übersicht über Java
Voraussichtliche Funktionen von Java
[Java] Bedeutung der serialVersionUID
Java - Vereinigung von Kommentaren
Überprüfung der Java-Innenklasse
Geschichte der Java-Annotationen
Java (Verdienste des Polymorphismus)
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Überprüfen Sie jetzt die Java-Anmerkungen
Überprüfen Sie java8 ~ Lambda Typ ~
[Java] Drei Funktionen von Java
Zusammenfassung der Java-Unterstützung 2018
Java-Überprüfung ③ (grundlegende Verwendung von Arrays / Referenztyp)
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
[Java] Mirage-Basic-Verwendung von SQL
[Java] Anfängerverständnis von Servlet-②
[Java] Praxis der Ausnahmebehandlung [Ausnahme]
Grundlagen der Zeichenoperation (Java)
Progate Java (Anfänger) Review & Zusammenfassung
[Java] Erstellen von Originalanmerkungen
Java-Lerntag 4
[Java] Anfängerverständnis von Servlet-①
Java Ende des Monats plusMonate
Überprüfungshinweise zum Java Collections Framework
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)
[Java] Implementierung des Faistel-Netzwerks
[Java] Komparator der Collection-Klasse
Zusammenfassung der Grundlagen der Java-Sprache
Zusammenfassung der Java Math Klasse
Aufzählung aller Kombinationen Java
Java (Vererbung von is-ein Prinzip)
Vor- und Nachteile von Java
Vorteile der statischen Java-Methode
[Java] Zusammenfassung der Steuerungssyntax
Java-Implementierung von Tri-Tree
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der Entwurfsmuster
[Java] Zusammenfassung der mathematischen Operationen
[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
Denken Sie an eine Java-Update-Strategie
[Java] Löschen Sie die Elemente von List
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Verschiedene Methoden der Java String Klasse
Grundursache für Java Framework Bug
Über Biocontainer fastqc und Java
[Java Edition] Geschichte der Serialisierung
Zusammenfassung des Pakets [Java Silver Study]
Über Lambda, Stream, LocalDate von Java8