BufferedWriter.flush în Java

Trimite imediat la destinație textul adunat în buffer, fără să închidă writer-ul.

Sintaxă
void flush() throws IOException

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 trebuie close().

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.