NIO.2 examen de Java

Après java IO et NIO, passez en revue NIO.2. !!

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

Qu'est-ce que NIO.2

En termes simples, il s'agit d'une amélioration par rapport au NIO existant.

  1. FileIO amélioré
  2. E / S améliorées basées sur un canal asynchrone

Amélioration de FileIO

API principale

Nom de l'API Aperçu
Path Représente une route indépendante de la plate-forme
Paths Classe d'utilitaire de chemin
(Pour l'acquisition d'instances Path(get)N'était qu'une méthode)
Files Classe d'utilitaire de fichier

Chat: les chemins et les fichiers suivent les règles de dénomination cohérentes de Java.

Path, Paths

Exemple de chemin(Je voulais l'obtenir avec markdown)


private static void showPath(Path path) {
    System.out.println("|Contenu de l'acquisition|résultat|");
    System.out.println("|---|---|");
    System.out.printf("|%s | %s |\r\n", "Nombre d'éléments", path.getNameCount());
    System.out.printf("|%s | %s |\r\n", "Nom d'élément spécifié", path.getName(0));
    System.out.printf("|%s | %s |\r\n", "nom de fichier", path.getFileName());
    System.out.printf("|%s | %s |\r\n", "Nom du système de fichiers", path.getFileSystem());
    System.out.printf("|%s | %s |\r\n", "parent", path.getParent());
    System.out.printf("|%s | %s |\r\n", "racine", path.getRoot());
    System.out.printf("|%s | %s |\r\n", "Est-ce une passe absolue?", path.isAbsolute());
}

Path,Paths


private static void path_test() {
    //Chemin relatif
    Path relativePath = Paths.get(".", "NIO2", "sub", "nio2-file.txt");
    System.out.println("----Chemin relatif----");
    showPath(relativePath);
    //Chemin absolu
    System.out.println("----Chemin absolu----");
    showPath(relativePath.toAbsolutePath());
}
Contenu de l'acquisition résultat
Nombre d'éléments 4
Nom d'élément spécifié .
nom de fichier nio2-file.txt
Nom du système de fichiers sun.nio.fs.WindowsFileSystem@6e0be858
parent .\NIO2\sub
racine null
Est-ce une passe absolue? false
Contenu de l'acquisition résultat
Nombre d'éléments 8
Nom d'élément spécifié workspace
nom de fichier nio2-file.txt
Nom du système de fichiers sun.nio.fs.WindowsFileSystem@6e0be858
parent C:\workspace\git\java-projects\java-sample.\NIO2\sub
racine C:\
Est-ce une passe absolue? true
  1. Le résultat à obtenir diffère selon le chemin absolu et le chemin relatif.
  2. sun.nio.fs.WindowsFileSystem, qui rend __ "indépendant de la plate-forme" __?
  3. Obtenir une instance de Path à partir de Paths # get (__File to Path, Path to File est également possible __)

Files

Échantillon de fichiers

nio2-src.txt


1ère ligne, AIC
Deuxième ligne, UTF-8?
3e ligne

Échantillon de fichiers(Je voulais l'obtenir avec markdown)


private static void testFiles(Path path) {
    System.out.println("|Contenu de l'acquisition|résultat|");
    System.out.println("|---|---|");
    try {
        System.out.printf("|%s | %s |\r\n", "Est-ce un annuaire?", Files.isDirectory(path));
        System.out.printf("|%s | %s |\r\n", "Caché", Files.isHidden(path));
        System.out.printf("|%s | %s |\r\n", "Est-ce un annuaire?", Files.isWritable(path));
        System.out.printf("|%s | %s |\r\n", "La taille est", Files.size(path));
        System.out.printf("|%s | " , "Obtenir le contenu du fichier");
        Files.lines(path).forEach(line -> {
            System.out.printf("%s<br>" , line);
        });
        System.out.printf("|\r\n");
        System.out.printf("|%s | " , "Obtenir les éléments du répertoire");
        Files.list(path.getParent()).forEach(p -> {
            System.out.printf("%s<br>" , p);
        });
        System.out.printf("|\r\n");
        System.out.printf("|%s | %s |\r\n", "Capacité de stockage", Files.getFileStore(path).getTotalSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Capacité disponible", Files.getFileStore(path).getUsableSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Capacité non allouée", Files.getFileStore(path).getUnallocatedSpace() / 1024 / 1024 / 1024 + "GB");
        System.out.printf("|%s | %s |\r\n", "Existe-t-il", Files.exists(path));
        Files.delete(path);
        System.out.printf("|%s | %s |\r\n", "effacer", "Supprimé");
        System.out.printf("|%s | %s |\r\n", "Existe-t-il", Files.exists(path));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Contenu de l'acquisition résultat
Est-ce un annuaire? false
Caché false
Est-ce un annuaire? true
La taille est 64
Obtenir le contenu du fichier 1ère ligne, AIC
Deuxième ligne, UTF-8?
3e ligne
Obtenir les éléments du répertoire .\NIO2\nio2-desc.txt
.\NIO2\nio2-src.txt
.\NIO2\sub
Capacité de stockage 111GB
Capacité disponible 54GB
Capacité non allouée 54GB
Existe-t-il true
effacer Supprimé
Existe-t-il false

File#WalkTree Avec les E / S existantes, j'ai dû implémenter moi-même l'analyse récursive, et le code était compliqué et pas facile à utiliser.

Dans la version 1.7, Files # walkFileTree permet une analyse récursive.

callback Aperçu
preVisitDirectory Se produit avant l'accès au répertoire
visitFile Se produit avant l'accès au répertoire
visitFileFailed Se produit avant l'accès au répertoire
postVisitDirectory Se produit après l'accès au répertoire
FileVisitResult Aperçu
CONTINUE continuer
SKIP_SIBLINGS Après avoir continué, le fichier correspondant,Ne pas analyser la hiérarchie des frères du répertoire
SKIP_SUBTREE Après avoir continué, le fichier correspondant,Ne pas analyser la hiérarchie enfant du répertoire
TERMINATE walk(balayage)Quitter

Il y avait des exemples de walkFileTree ici et là, je vais donc les omettre!

Files#walk En 1.8, Files # walk est pratique!

Files.walk


Files.walk(Paths.get(".", "NIO2"), FileVisitOption.FOLLOW_LINKS)
    //Permuter le répertoire et le fichier
    .sorted(Comparator.reverseOrder())
    //Confirmation de la cible de suppression
    .peek(System.out::println)
    //Effacer
    .forEach(path -> {
        try {
            Files.delete(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    });

Autre

WatchService C'est un mécanisme pour surveiller les changements de fichiers. De manière traditionnelle, la mise en œuvre possible est

  1. Lancez un autre fil
  2. Enregistrez l'état
  3. Scannez à intervalles réguliers et comparez avec l'état précédent

WatchService facilite la création de fichiers.

Échantillon WatchService


try {
    WatchService watchService = FileSystems.getDefault().newWatchService();
    Paths.get(".").register(
        watchService,
        StandardWatchEventKinds.ENTRY_CREATE, //CRÉER un moniteur
        StandardWatchEventKinds.ENTRY_DELETE, //DELETE surveillance
        StandardWatchEventKinds.ENTRY_MODIFY  //MODIFIER la surveillance
    );
    System.out.println("-----regarder démarrer-----");
    while (true) {
        //Faire attendre
        WatchKey key = watchService.take();
        key.pollEvents().stream()
            .forEach(
                watchEvent -> {
                    System.out.println("Type d'occurrence: " + watchEvent.kind().name());
                    System.out.println("Nom de la cible: " + watchEvent.context());
                });
        //Suivi suivant
        if (!key.reset()) {
            break;
        }
    }
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}
  1. Générez WatchService
  2. Enregistrez WatchService et surveillez le contenu
  3. Obtenez WatchKey
  1. Traitement
  2. Réinitialisation de WatchKey

Attribut lecture / écriture

En gros, il s'agit d'une implémentation de FileAttributeView, et il semble que vous puissiez utiliser des attributs détaillés.

Exemple BasicFileAttributeView


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

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

System.out.println("Dernier accès: " + attributes.lastAccessTime());
System.out.println("Dernière heure de correction: " + attributes.lastModifiedTime());

Recommended Posts

NIO.2 examen de Java
Examen NIO de Java
Avis sur Java Shilber
Notes de révision de Java NIO 2
Revue Java
java IO examen
[Java] Présentation de Java
Caractéristiques prévues de Java
[Java] Importance de serialVersionUID
java --Unification des commentaires
Examen de la classe interne Java
Histoire des annotations Java
java (mérites du polymorphisme)
Un examen rapide de Java appris en classe
Consultez les annotations Java maintenant
Évaluer java8 ~ Type Lambda ~
[Java] Trois fonctionnalités de Java
Résumé du support Java 2018
Revue Java ③ (utilisation de base des tableaux / type de référence)
Un examen rapide de Java appris en classe part4
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
Un examen rapide de Java appris en classe part3
Un examen rapide de Java appris en classe part2
[Java] Utilisation de Mirage-Basic de SQL
[Java] Compréhension débutante de Servlet-②
[Java] Pratique de la gestion des exceptions [Exception]
Principes de base de l'utilisation des caractères (Java)
Révision et résumé de Progate Java (débutant)
[Java] Création d'annotations originales
java learning day 4
[Java] Compréhension débutante de Servlet-①
Java fin du mois plusMonths
Notes de révision de Java Collections Framework
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
[Java] Implémentation du réseau Faistel
[Java] Comparateur de la classe Collection
Résumé des bases du langage Java
Résumé de la classe Java Math
Énumération de toutes les combinaisons Java
java (héritage du principe is-a)
Avantages et inconvénients de Java
Avantages de la méthode statique Java
[Java] Résumé de la syntaxe de contrôle
Implémentation Java de tri-tree
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
[Java] Comparaison de vitesse de combinaison de chaînes
Pensez à une stratégie de mise à jour Java
[Java] Supprimer les éléments de la liste
[Pour les débutants] Résumé du constructeur java
Diverses méthodes de la classe Java String
Cause fondamentale du bogue du framework Java
À propos de Biocontainers fastqc et Java
[Édition Java] Histoire de la sérialisation
Résumé du package [Java Silver Study]
À propos de Lambda, Stream, LocalDate de Java8