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ă unreadLine()în corp: sari peste fiecare al doilea rând. - Verifici sfârșitul cu
rand.isEmpty(). Sfârșitul estenull; 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.