Ce face BufferedWriter.flush
Un BufferedWriter ține textul în memorie până se umple buffer-ul. flush() golește buffer-ul acum: textul ajunge în fișier (sau în writer-ul de dedesubt), iar writer-ul rămâne deschis pentru alte scrieri.
close() face automat un flush() înainte de închidere, deci de obicei nu trebuie apelat separat. Este util când un fișier de jurnal trebuie să fie la zi în timp ce programul încă rulează, sau înainte de a citi fișierul din alt loc.
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Textul ajunge în fișier abia după flush
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 jurnal = Path.of("jurnal.log");
try (BufferedWriter out = Files.newBufferedWriter(jurnal)) {
out.write("09:00 pornire aplicație");
out.newLine();
System.out.println("Înainte de flush: " + Files.size(jurnal) + " octeți");
out.flush();
System.out.println("După flush: " + Files.size(jurnal) + " octeți");
out.write("09:05 utilizator conectat: ana");
out.newLine();
}
System.out.println("După close: " + Files.size(jurnal) + " octeți");
}
}
Rezultat
Înainte de flush: 0 octeți
După flush: 25 octeți
După close: 56 octeți
Exemplul 2: Fără close și fără flush, fișierul rămâne gol
Programul uită să închidă writer-ul. Textul rămâne în memorie și nu ajunge pe disc.
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("comanda.txt");
BufferedWriter out = Files.newBufferedWriter(cale);
out.write("Comanda #15: 2 pizza, 1 suc");
System.out.println("Conținut: [" + Files.readString(cale) + "]");
out.close();
System.out.println("Conținut după close: [" + Files.readString(cale) + "]");
}
}
Rezultat
Conținut: []
Conținut după close: [Comanda #15: 2 pizza, 1 suc]
Greșeli frecvente
- Apelezi
flush()după fiecare rând într-o buclă mare: pierzi tot avantajul buffer-ului. Apelează-l doar când e nevoie. - Crezi că
flush()închide fișierul. Writer-ul rămâne deschis; tot trebuieclose().
Comenzi înrudite
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.PrintStream: Fluxul de ieșire cu print, println și printf; System.out este un PrintStream. Poate scrie și în fișiere.Files.newBufferedReader: Deschide un fișier pentru citire pe rânduri (BufferedReader) sau pentru scriere în bucăți (BufferedWriter), în UTF-8.