Ce face Files.newBufferedReader
Files.newBufferedReader(cale) deschide fișierul și returnează un BufferedReader, cu care citești rând cu rând (readLine). Este calea modernă de a crea un BufferedReader pentru un fișier, cu UTF-8 implicit.
Files.newBufferedWriter(cale) deschide fișierul pentru scriere și returnează un BufferedWriter. Ca la writeString, fișierul este creat sau golit; cu StandardOpenOption.APPEND se adaugă la final. Este potrivit când scrii mult, pe bucăți, de exemplu într-o buclă.
Ambele trebuie închise: pune-le în try-with-resources. La închidere, writer-ul scrie pe disc tot ce mai are în memorie.
Parametri
| Parametru | Descriere |
|---|---|
cale |
Fișierul deschis. |
optiuni |
Pentru writer: APPEND, CREATE_NEW etc. |
Ce returnează
Un BufferedReader, respectiv un BufferedWriter.
Exemple
Exemplul 1: Scriere într-o buclă, apoi citire pe rânduri
import java.io.BufferedReader;
import java.io.BufferedWriter;
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 = Path.of("tabla.txt");
try (BufferedWriter out = Files.newBufferedWriter(cale)) {
for (int i = 1; i <= 4; i++) {
out.write("3 x " + i + " = " + 3 * i);
out.newLine();
}
}
try (BufferedReader in = Files.newBufferedReader(cale)) {
String rand;
int nr = 0;
while ((rand = in.readLine()) != null) {
nr++;
System.out.println(nr + ": " + rand);
}
}
}
}
Rezultat
1: 3 x 1 = 3
2: 3 x 2 = 6
3: 3 x 3 = 9
4: 3 x 4 = 12
Exemplul 2: Adăugare la un fișier existent
Cu APPEND, rândurile noi se pun după cele vechi.
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class Main {
public static void main(String[] args) throws IOException {
Path cale = Path.of("comenzi.txt");
Files.writeString(cale, "#1 Ana - 120 lei\n");
try (BufferedWriter out = Files.newBufferedWriter(cale, StandardOpenOption.APPEND)) {
out.write("#2 Radu - 75 lei");
out.newLine();
out.write("#3 Ioana - 210 lei");
out.newLine();
}
System.out.print(Files.readString(cale));
}
}
Rezultat
#1 Ana - 120 lei
#2 Radu - 75 lei
#3 Ioana - 210 lei
Greșeli frecvente
- Uiți să închizi writer-ul: o parte din text rămâne în memorie și nu ajunge în fișier.
- Folosești
new FileReader(...)fără codare: pe sisteme vechi poate citi diacriticele greșit.Files.newBufferedReaderfolosește UTF-8.
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.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.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.writeString: Scrie un text într-un fișier (UTF-8): îl creează sau îl suprascrie; cu StandardOpenOption.APPEND adaugă la final.