Java Language BufferedReader


Exemple

introduction

La classe BufferedReader est un wrapper pour les autres classes Reader qui remplit deux fonctions principales:

  1. Un BufferedReader fournit une mémoire tampon pour le Reader . Cela permet à une application de lire les caractères un par un sans surcharger les E / S.

  2. Un BufferedReader fournit des fonctionnalités permettant de lire du texte ligne par ligne.

Notions de base sur l'utilisation d'un BufferedReader

Le schéma normal d'utilisation d'un BufferedReader est le suivant. Tout d'abord, vous obtenez le Reader dont vous souhaitez lire les caractères. Ensuite, vous instanciez un BufferedReader qui encapsule le Reader . Ensuite, vous lisez les données de caractères. Enfin, vous fermez le BufferedReader qui ferme le lecteur `enveloppé. Par exemple:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // Count the number of 'a' characters.
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}

Vous pouvez appliquer ce modèle à n'importe quel Reader

Remarques:

  1. Nous avons utilisé Java 7 (ou ultérieur) avec des ressources pour garantir que le lecteur sous-jacent est toujours fermé. Cela évite une fuite potentielle de ressources. Dans les versions antérieures de Java, vous fermiez explicitement BufferedReader dans un bloc finally .

  2. Le code à l'intérieur du bloc try est pratiquement identique à ce que nous utiliserions si nous FileReader directement à partir de FileReader . En fait, un BufferedReader fonctionne exactement comme le Reader qu'il encapsule. La différence est que cette version est beaucoup plus efficace.

La taille du tampon BufferedReader

La méthode BufferedReader.readLine ()

Exemple: lecture de toutes les lignes d'un fichier dans une liste

Cela se fait en extrayant chaque ligne d'un fichier et en l'ajoutant à une List<String> . La liste est alors renvoyée:

public List<String> getAllLines(String filename) throws IOException {
    List<String> lines = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line = null;
        while ((line = reader.readLine) != null) {
            lines.add(line);
        }
    }
    return lines;
}

Java 8 fournit un moyen plus concis de le faire en utilisant la méthode lines() :

public List<String> getAllLines(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        return br.lines().collect(Collectors.toList());
    }
    return Collections.empty();
}