BufferedReader în Java

Citește text eficient, rând cu rând, dintr-un fișier, de la tastatură sau din alt Reader; close închide sursa.

Sintaxă
import java.io.BufferedReader;

new BufferedReader(Reader sursa)
void close() throws IOException

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ște Files.newBufferedReader sau new 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.