Méthode newBufferedReader() de java.nio.file.Files en Java

Java File Java java.nio.file.Files


java.nio.file.Files.newBufferedReader()est une méthode très pratique du package Java NIO (New Input/Output), utilisée pour lire efficacement des fichiers texte. Elle se trouve dansjava.nio.filele package, et fait partie des améliorations d'E/S de fichiers introduites dans Java 7.

L'objectif principal de la méthode newBufferedReader() est de créer unBufferedReaderobjet, utilisé pour lire efficacement le contenu textuel du fichier situé au chemin spécifié. Comparé au traditionnelFileReaderil offre de meilleures performances car il utilise un mécanisme de mise en mémoire tampon.

Définition de méthode

FilesLa classe fournit deux méthodes surchargéesnewBufferedReaderméthodes :

public static BufferedReader newBufferedReader(Path path) throws IOException
public static BufferedReader newBufferedReader(Path path, Charset charset) throws IOException

Description du paramètre

  • path: le chemin du fichier à lire, de typejava.nio.file.Path
  • charset(facultatif) : le jeu de caractères utilisé pour décoder le fichier, de typejava.nio.charset.Charset

Valeur de retour

Retourne un nouveauBufferedReaderobjet qui peut être utilisé pour lire le contenu du fichier.

Exceptions

  • IOException: si une erreur d'E/S se produit lors de l'ouverture du fichier
  • SecurityException: si un gestionnaire de sécurité existe et refuse l'accès au fichier

Exemples d'utilisation de la méthode

Utilisation de base

Exemple

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileReaderExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
       
        try (BufferedReader reader = Files.newBufferedReader(path)) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Spécifier le jeu de caractères

Exemple

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileReaderWithCharset {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
       
        try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Caractéristiques et avantages de la méthode

Mécanisme de mise en mémoire tampon

newBufferedReader()Le crééBufferedReaderutilise un tampon interne, ce qui signifie :

  • Moins d'opérations d'E/S réelles
  • Performances améliorées lors de la lecture de grandes quantités de données texte
  • Adapté à la lecture de fichiers volumineux

Gestion automatique des ressources

Lorsqu'il est utilisé avec une instruction try-with-resources (comme dans l'exemple ci-dessus),BufferedReaderest automatiquement fermé sans qu'il soit nécessaire d'appeler manuellementclose()méthode.

Prise en charge des jeux de caractères

Vous pouvez spécifier un jeu de caractères pour lire correctement des fichiers texte avec différents encodages, en évitant les caractères illisibles.


Notes

Vérification de l'existence d'un fichier

Avant d'appelernewBufferedReader()vous pouvez utiliserFiles.exists(path)pour vérifier si le fichier existe :

Exemple

if (Files.exists(path)) {
    // Lire le fichier
} else {
    System.out.println("Le fichier n'existe pas");
}

Considérations de performance

Pour les fichiers très volumineux, la lecture ligne par ligne (readLine()) peut ne pas être la méthode la plus efficace. Dans ce cas, envisagez d'utiliserFiles.lines()méthode, qui renvoie unStream<String>, qui peut tirer parti du traitement parallèle pour améliorer les performances.

5.3 Gestion des exceptions

Toujours gérer correctementIOException, en particulier dans les environnements de production. L'exemple ci-dessus utilise un simpleprintStackTrace(); dans les applications réelles, une logique de gestion des erreurs plus détaillée peut être nécessaire.


Comparaison avec d'autres méthodes

Comparaison avec le FileReader traditionnel

Exemple

// Méthode traditionnelle
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));

// méthode NIO
BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"));

Avantages de l'approche NIO :

  • API plus concise
  • Meilleure gestion des exceptions
  • Prend en charge les objets Path, plus compatible avec les autres opérations NIO

Comparaison avec Files.readAllLines()

Files.readAllLines()lit toutes les lignes en mémoire en une seule fois, adapté aux petits fichiers. En revanche,newBufferedReader()convient au traitement de fichiers volumineux ligne par ligne.


Résumé

java.nio.file.Files.newBufferedReader()est une méthode puissante et flexible pour lire efficacement des fichiers texte. Elle combine les avantages des E/S tamponnées avec la conception moderne de l'API de NIO, ce qui en fait l'une des méthodes privilégiées pour lire des fichiers texte en Java.

Points clés :

  • Utilise la mise en mémoire tampon pour améliorer les performances de lecture
  • Prend en charge la spécification d'un jeu de caractères pour éviter les problèmes d'encodage
  • À utiliser avec try-with-resources pour garantir la libération des ressources
  • Adapté au traitement de fichiers texte volumineux

En développement réel, choisissez la variante de méthode appropriée en fonction des besoins spécifiques, et veillez toujours à la gestion des exceptions et des ressources.

Java File Java java.nio.file.Files

Autres extensions