Java Language
Lecteurs et écrivains
Recherche…
Introduction
Les lecteurs et les enregistreurs et leurs sous-classes respectives fournissent des E / S simples pour les données textuelles / basées sur des caractères.
BufferedReader
introduction
La classe BufferedReader
est un wrapper pour les autres classes Reader
qui remplit deux fonctions principales:
Un
BufferedReader
fournit une mémoire tampon pour leReader
. Cela permet à une application de lire les caractères un par un sans surcharger les E / S.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:
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 blocfinally
.Le code à l'intérieur du bloc
try
est pratiquement identique à ce que nous utiliserions si nousFileReader
directement à partir deFileReader
. En fait, unBufferedReader
fonctionne exactement comme leReader
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();
}
Exemple StringWriter
La classe Java StringWriter est un flux de caractères qui collecte la sortie du tampon de chaîne, qui peut être utilisé pour créer une chaîne.
La classe StringWriter étend la classe Writer.
Dans la classe StringWriter, les ressources système telles que les sockets réseau et les fichiers ne sont pas utilisées. Par conséquent, la fermeture de StringWriter n'est pas nécessaire.
import java.io.*;
public class StringWriterDemo {
public static void main(String[] args) throws IOException {
char[] ary = new char[1024];
StringWriter writer = new StringWriter();
FileInputStream input = null;
BufferedReader buffer = null;
input = new FileInputStream("c://stringwriter.txt");
buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));
int x;
while ((x = buffer.read(ary)) != -1) {
writer.write(ary, 0, x);
}
System.out.println(writer.toString());
writer.close();
buffer.close();
}
}
L'exemple ci-dessus nous aide à connaître un exemple simple de StringWriter utilisant BufferedReader pour lire des données de fichier à partir du flux.