Ce face BufferedWriter
BufferedWriter învelește alt Writer (de exemplu un FileWriter) și păstrează textul într-un buffer până se adună destul. Astfel, multe scrieri mici (într-o buclă) nu înseamnă multe accesări ale discului. Pentru fișiere îl obții direct cu Files.newBufferedWriter(cale).
write(text) adaugă textul, fără să treacă la rând nou. newLine() scrie separatorul de rând al sistemului (\n pe Linux și macOS, \r\n pe Windows). Există și write(int c) pentru un caracter și write(text, start, lungime) pentru o parte din text.
Textul ajunge sigur în fișier abia la flush() sau close(). Folosește try-with-resources, ca close() să se apeleze și când apare o eroare.
Parametri
| Parametru | Descriere |
|---|---|
destinatie |
Writer-ul în care se scrie (FileWriter, OutputStreamWriter, StringWriter). |
text |
Pentru write: textul scris. |
Ce returnează
write și newLine nu returnează nimic.
Exemple
Exemplul 1: Un raport scris rând cu rând
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws IOException {
String[] elevi = {"Ana", "Radu", "Ioana"};
int[] note = {9, 7, 10};
try (BufferedWriter out = new BufferedWriter(new FileWriter("catalog.txt", StandardCharsets.UTF_8))) {
out.write("Catalog clasa a IX-a");
out.newLine();
for (int i = 0; i < elevi.length; i++) {
out.write(elevi[i] + ": " + note[i]);
out.newLine();
}
}
System.out.print(Files.readString(Path.of("catalog.txt")));
}
}
Rezultat
Catalog clasa a IX-a
Ana: 9
Radu: 7
Ioana: 10
Exemplul 2: Scriere într-un StringWriter
Un StringWriter adună textul în memorie; e util pentru teste sau când construiești un text mare.
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.StringWriter;
public class Main {
public static void main(String[] args) throws IOException {
StringWriter memorie = new StringWriter();
try (BufferedWriter out = new BufferedWriter(memorie)) {
out.write("Iași");
out.write(", ");
out.write("Cluj-Napoca, Timișoara", 0, 11);
out.newLine();
out.write('!');
}
System.out.println(memorie);
}
}
Rezultat
Iași, Cluj-Napoca
!
Greșeli frecvente
- Scrii
out.write("text\n")pentru fișiere care trebuie să arate bine pe Windows.newLine()pune separatorul potrivit sistemului. - Scrii un număr cu
write(65)și te miri că în fișier apare „A”.write(int)scrie un caracter; pentru număr foloseștewrite(String.valueOf(65)). - Uiți
close(): fișierul rămâne gol sau incomplet.
Comenzi înrudite
BufferedWriter.flush: Trimite imediat la destinație textul adunat în buffer, fără să închidă writer-ul.Files.newBufferedReader: Deschide un fișier pentru citire pe rânduri (BufferedReader) sau pentru scriere în bucăți (BufferedWriter), în UTF-8.PrintStream: Fluxul de ieșire cu print, println și printf; System.out este un PrintStream. Poate scrie și în fișiere.BufferedReader: Citește text eficient, rând cu rând, dintr-un fișier, de la tastatură sau din alt Reader; close închide sursa.