BufferedReader.readLine în Java

Citește următorul rând de text, fără sfârșitul de rând; returnează null la sfârșitul sursei.

Sintaxă
String readLine() throws IOException

Ce face BufferedReader.readLine

readLine() returnează rândul următor, fără \n sau \r\n. Când nu mai există rânduri, returnează null, nu un text gol. Un rând gol din fișier dă "".

Modelul clasic de citire este while ((rand = in.readLine()) != null) { ... }: atribuirea și verificarea stau în aceeași condiție.

Ce returnează

Rândul citit sau null dacă s-a ajuns la sfârșit.

Exemple

Exemplul 1: Numerotarea rândurilor dintr-un fișier

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

public class Main {
    public static void main(String[] args) throws IOException {
        Path cale = Files.writeString(Path.of("reteta.txt"), "200 g făină\n\n2 ouă\n100 ml lapte\n");

        try (BufferedReader in = Files.newBufferedReader(cale)) {
            String rand;
            int nr = 0;
            while ((rand = in.readLine()) != null) {
                nr++;
                System.out.println(nr + ": [" + rand + "]");
            }
        }
    }
}

Rezultat

1: [200 g făină]
2: []
3: [2 ouă]
4: [100 ml lapte]

Exemplul 2: Suma numerelor de la tastatură, până la sfârșit

Rândurile goale sunt sărite; la sfârșitul intrării readLine() dă null și bucla se oprește.

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));
        int suma = 0;
        String rand;
        while ((rand = in.readLine()) != null) {
            if (rand.isBlank()) {
                continue;
            }
            suma += Integer.parseInt(rand.strip());
        }
        System.out.println("Total cheltuieli: " + suma + " lei");
    }
}

Ce scrie utilizatorul (intrare)

45
120

35

Rezultat

Total cheltuieli: 200 lei

Greșeli frecvente

  • Scrii while (in.readLine() != null) și apoi încă un readLine() în corp: sari peste fiecare al doilea rând.
  • Verifici sfârșitul cu rand.isEmpty(). Sfârșitul este null; un text gol înseamnă doar un rând gol.

Comenzi înrudite

  • BufferedReader: Citește text eficient, rând cu rând, dintr-un fișier, de la tastatură sau din alt Reader; close închide sursa.
  • BufferedReader.lines: Returnează rândurile rămase din reader ca Stream<String>, ca să le prelucrezi cu filter, map, count.
  • Scanner.nextLine: Citește tot restul rândului curent (cu spații cu tot) și returnează textul fără sfârșitul de rând.
  • Files.readAllLines: Citește un fișier text și returnează o listă cu rândurile lui, fără caracterele de sfârșit de rând.