BufferedWriter în Java

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.

Sintaxă
import java.io.BufferedWriter;

new BufferedWriter(Writer destinatie)
void write(String text) throws IOException
void newLine() throws IOException

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ște write(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.