Files.newBufferedReader în Java

Fișiere cu Files Java 7 (fără Charset: Java 8)

Deschide un fișier pentru citire pe rânduri (BufferedReader) sau pentru scriere în bucăți (BufferedWriter), în UTF-8.

Sintaxă
static BufferedReader newBufferedReader(Path cale) throws IOException
static BufferedWriter newBufferedWriter(Path cale, OpenOption... optiuni) throws IOException

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.newBufferedReader foloseș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.