Ce face BufferedReader
BufferedReader învelește un alt Reader și citește din el în bucăți mari (8192 de caractere), ținute într-o zonă de memorie numită buffer. Așa citirea rând cu rând cu readLine() este rapidă chiar pentru fișiere mari.
Pentru un fișier îl obții cu Files.newBufferedReader(cale). Pentru tastatură scrii new BufferedReader(new InputStreamReader(System.in)). Este mai rapid decât Scanner, dar citește doar text: numerele le transformi tu cu Integer.parseInt.
close() închide reader-ul și sursa de dedesubt. Pune-l în try-with-resources, ca închiderea să se facă automat.
Parametri
| Parametru | Descriere |
|---|---|
sursa |
Reader-ul din care se citește (FileReader, InputStreamReader, StringReader …). |
Ce returnează
Un obiect BufferedReader.
Exemple
Exemplul 1: Citire de la tastatură cu BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String nume = in.readLine();
int n = Integer.parseInt(in.readLine().strip());
for (int i = 0; i < n; i++) {
System.out.println("La mulți ani, " + nume + "!");
}
}
}
Ce scrie utilizatorul (intrare)
Elena
3
Rezultat
La mulți ani, Elena!
La mulți ani, Elena!
La mulți ani, Elena!
Exemplul 2: try-with-resources închide reader-ul
Un StringReader joacă rolul unui fișier; la ieșirea din try, close() se apelează singur.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
public class Main {
public static void main(String[] args) throws IOException {
String date = "Iași,271000\nCluj,286000\nArad,145000\n";
try (BufferedReader in = new BufferedReader(new StringReader(date))) {
String rand;
while ((rand = in.readLine()) != null) {
String[] p = rand.split(",");
System.out.println(p[0] + ": " + Integer.parseInt(p[1]) / 1000 + " mii locuitori");
}
}
System.out.println("Reader închis.");
}
}
Rezultat
Iași: 271 mii locuitori
Cluj: 286 mii locuitori
Arad: 145 mii locuitori
Reader închis.
Greșeli frecvente
- Creezi
new FileReader("x.txt")fără codare: pe unele sisteme diacriticele ies greșit. FoloseșteFiles.newBufferedReadersaunew FileReader(f, StandardCharsets.UTF_8). - Uiți să închizi reader-ul unui fișier. Folosește
try-with-resources.
Comenzi înrudite
BufferedReader.readLine: Citește următorul rând de text, fără sfârșitul de rând; returnează null la sfârșitul sursei.BufferedReader.lines: Returnează rândurile rămase din reader ca Stream<String>, ca să le prelucrezi cu filter, map, count.Files.newBufferedReader: Deschide un fișier pentru citire pe rânduri (BufferedReader) sau pentru scriere în bucăți (BufferedWriter), în UTF-8.Scanner: Citește text și numere de la tastatură, dintr-un String sau dintr-un fișier, bucată cu bucată; close îl închide.BufferedWriter: Scrie text eficient, adunându-l în memorie și trimițându-l în bucăți mari; write scrie text, newLine un sfârșit de rând.