Ce face Files.readAllLines
Files.readAllLines(cale) citește tot fișierul și returnează un List<String>, câte un element pentru fiecare rând. Caracterele de sfârșit de rând (\n, \r\n) sunt eliminate, deci nu mai trebuie să le tai tu.
Lista se poate modifica și se poate parcurge de câte ori vrei. Ca la readString, tot fișierul ajunge în memorie; pentru fișiere uriașe folosește Files.lines, care citește leneș.
Parametri
| Parametru | Descriere |
|---|---|
cale |
Fișierul citit. |
codare |
Opțional: setul de caractere, implicit UTF-8. |
Ce returnează
Un List<String> cu rândurile fișierului.
Exemple
Exemplul 1: Catalogul unei clase dintr-un fișier CSV
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
Path cale = Path.of("catalog.csv");
Files.writeString(cale, "nume,nota\nAna,9\nRadu,7\nIoana,10\n");
List<String> randuri = Files.readAllLines(cale);
System.out.println("Rânduri citite: " + randuri.size());
System.out.println("Antet: " + randuri.get(0));
double suma = 0;
for (String rand : randuri.subList(1, randuri.size())) {
String[] campuri = rand.split(",");
System.out.println(campuri[0] + " are nota " + campuri[1]);
suma += Integer.parseInt(campuri[1]);
}
System.out.printf("Media: %.2f%n", suma / (randuri.size() - 1));
}
}
Rezultat
Rânduri citite: 4
Antet: nume,nota
Ana are nota 9
Radu are nota 7
Ioana are nota 10
Media: 8.67
Exemplul 2: Sfârșiturile de rând Windows sunt eliminate
Fișierul are \r\n (ca pe Windows), dar rândurile citite nu mai conțin \r.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
Path cale = Path.of("orase.txt");
Files.writeString(cale, "Iași\r\nCluj\r\nSibiu\r\n");
List<String> orase = Files.readAllLines(cale);
for (String o : orase) {
System.out.println("[" + o + "] " + o.length() + " litere");
}
}
}
Rezultat
[Iași] 4 litere
[Cluj] 4 litere
[Sibiu] 5 litere
Greșeli frecvente
- Uiți că primul rând dintr-un CSV este antetul și încerci să-l transformi în număr:
NumberFormatException. - Folosești
readAllLinespe un jurnal de server de câțiva gigaocteți. FoloseșteFiles.linesîntr-untry-with-resources.
Comenzi înrudite
Files.lines: Citește un fișier rând cu rând, ca Stream<String>; potrivit pentru fișiere mari. Se închide cu try-with-resources.Files.readString: Citește tot conținutul unui fișier text într-un singur String (implicit în UTF-8).Files.write: Scrie într-un fișier fie un tablou de octeți, fie o listă de rânduri (fiecare urmat de sfârșit de rând).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.