Files.write în Java

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

Scrie într-un fișier fie un tablou de octeți, fie o listă de rânduri (fiecare urmat de sfârșit de rând).

Sintaxă
static Path write(Path cale, byte[] octeti, OpenOption... optiuni) throws IOException
static Path write(Path cale, Iterable<? extends CharSequence> randuri, OpenOption... optiuni) throws IOException

Ce face Files.write

Files.write are două forme. Cu un byte[] scrie exact octeții dați: potrivit pentru fișiere binare sau date deja codate. Cu o listă de texte (List<String>), scrie fiecare element pe un rând și pune după fiecare separatorul de rând al sistemului (\n pe Linux și macOS, \r\n pe Windows).

Ca la writeString, fișierul este creat sau suprascris; opțiunile StandardOpenOption.APPEND, CREATE și CREATE_NEW schimbă acest lucru. Perechea pentru citire este Files.readAllLines sau Files.readAllBytes.

Parametri

Parametru Descriere
cale Fișierul în care se scrie.
octeti / randuri Datele: un byte[] sau o colecție de texte.
optiuni Opțional: cum se deschide fișierul (APPEND, CREATE_NEW …).

Ce returnează

Calea fișierului (Path).

Exemple

Exemplul 1: O listă de rânduri scrisă dintr-o dată

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        Path cale = Path.of("cumparaturi.txt");
        List<String> lista = List.of("pâine", "lapte", "mere", "brânză");
        Files.write(cale, lista);

        System.out.print(Files.readString(cale));
        System.out.println("Rânduri: " + Files.readAllLines(cale).size());
    }
}

Rezultat

pâine
lapte
mere
brânză
Rânduri: 4

Exemplul 2: Octeți și adăugare cu APPEND

Scriem octeții unui text, apoi adăugăm încă un rând. getBytes transformă textul în octeți UTF-8.

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        Path cale = Path.of("vanzari.csv");
        Files.write(cale, "oraș,lei\n".getBytes(StandardCharsets.UTF_8));
        Files.write(cale, List.of("Iași,1200", "Cluj,950"), StandardOpenOption.APPEND);

        System.out.print(Files.readString(cale));
        System.out.println("Octeți: " + Files.readAllBytes(cale).length);
    }
}

Rezultat

oraș,lei
Iași,1200
Cluj,950
Octeți: 30

Greșeli frecvente

  • Scrii Files.write(cale, text) cu un String: nu compilează. Pentru un singur text folosește writeString sau text.getBytes(...).
  • Te aștepți ca ultimul rând să nu aibă \n. Varianta cu listă pune separator după fiecare rând, inclusiv după ultimul.

Comenzi înrudite

  • Files.writeString: Scrie un text într-un fișier (UTF-8): îl creează sau îl suprascrie; cu StandardOpenOption.APPEND adaugă la final.
  • Files.readAllLines: Citește un fișier text și returnează o listă cu rândurile lui, fără caracterele de sfârșit de rând.
  • InputStream: Clasa de bază pentru citirea de octeți (fișiere, rețea, System.in); readAllBytes citește tot conținutul într-un byte[].
  • StandardCharsets: Constante pentru codările de text garantate în orice Java; UTF_8 este codarea potrivită pentru diacriticele românești.