Ce face Files.lines
Files.lines(cale) returnează un Stream<String> în care fiecare element este un rând. Rândurile se citesc pe măsură ce stream-ul le cere, deci poți prelucra fișiere mari fără să le ții întregi în memorie.
Stream-ul ține fișierul deschis. Folosește-l mereu într-un try-with-resources: try (Stream<String> rânduri = Files.lines(cale)) { ... }, ca fișierul să fie închis la final, chiar dacă apare o eroare.
Pe stream poți folosi tot ce știi: filter, map, count, collect. Sfârșiturile de rând sunt eliminate, ca la readAllLines.
Parametri
| Parametru | Descriere |
|---|---|
cale |
Fișierul citit. |
codare |
Opțional: setul de caractere, implicit UTF-8. |
Ce returnează
Un Stream<String> cu rândurile fișierului (trebuie închis).
Exemple
Exemplul 1: Erorile dintr-un jurnal
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
Path jurnal = Path.of("server.log");
Files.write(jurnal, List.of(
"INFO pornire server",
"EROARE conexiune bază de date",
"INFO cerere /acasa",
"EROARE fișier lipsă: logo.png"));
try (Stream<String> randuri = Files.lines(jurnal)) {
randuri.filter(r -> r.startsWith("EROARE"))
.map(r -> r.substring(7))
.forEach(System.out::println);
}
}
}
Rezultat
conexiune bază de date
fișier lipsă: logo.png
Exemplul 2: Numărarea cuvintelor dintr-un fișier
Fiecare rând este împărțit în cuvinte cu flatMap; rezultatul este numărul total de cuvinte.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
Path text = Path.of("text.txt");
Files.writeString(text, "A fost odată ca-n povești\nA fost ca niciodată\n");
try (Stream<String> randuri = Files.lines(text)) {
long cuvinte = randuri.flatMap(r -> Arrays.stream(r.split("\\s+"))).count();
System.out.println("Cuvinte: " + cuvinte);
}
}
}
Rezultat
Cuvinte: 9
Greșeli frecvente
- Nu închizi stream-ul: fișierul rămâne deschis. Pe Windows nu îl mai poți șterge, iar într-un server se termină descriptorii de fișiere.
- Returnezi stream-ul dintr-un
try-with-resources și îl folosești în afară: este deja închis și primeștiIllegalStateException. Colectează rezultatul în interior.
Comenzi înrudite
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.BufferedReader.lines: Returnează rândurile rămase din reader ca Stream<String>, ca să le prelucrezi cu filter, map, count.Stream.filter: Păstrează în stream doar elementele care îndeplinesc o condiție.Files.readString: Citește tot conținutul unui fișier text într-un singur String (implicit în UTF-8).