Files.writeString în Java

Scrie un text într-un fișier (UTF-8): îl creează sau îl suprascrie; cu StandardOpenOption.APPEND adaugă la final.

Sintaxă
static Path writeString(Path cale, CharSequence text, OpenOption... optiuni) throws IOException
static Path writeString(Path cale, CharSequence text, Charset codare, OpenOption... optiuni) throws IOException

Ce face Files.writeString

Files.writeString(cale, text) scrie textul în fișier. Dacă fișierul nu există, îl creează; dacă există, îi înlocuiește tot conținutul. Folderul în care se află fișierul trebuie să existe deja.

Comportamentul se schimbă cu opțiuni din StandardOpenOption: APPEND adaugă la sfârșit (cu CREATE, ca să creeze fișierul dacă lipsește), iar CREATE_NEW refuză să suprascrie un fișier existent (aruncă FileAlreadyExistsException).

Metoda nu adaugă \n la final; pune-l tu dacă vrei rânduri. Returnează calea primită, ca să poți continua cu ea.

Parametri

Parametru Descriere
cale Fișierul în care se scrie.
text Textul de scris.
optiuni Opțional: StandardOpenOption.APPEND, CREATE, CREATE_NEW etc.

Ce returnează

Calea fișierului (Path).

Exemple

Exemplul 1: Suprascriere și adăugare

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 jurnal = Path.of("jurnal.txt");

        Files.writeString(jurnal, "Luni: am învățat Java\n");
        Files.writeString(jurnal, "Marți: am învățat Stream\n");
        System.out.print("După două scrieri:\n" + Files.readString(jurnal));

        Files.writeString(jurnal, "Miercuri: am învățat Files\n", StandardOpenOption.APPEND);
        System.out.print("După APPEND:\n" + Files.readString(jurnal));
    }
}

Rezultat

După două scrieri:
Marți: am învățat Stream
După APPEND:
Marți: am învățat Stream
Miercuri: am învățat Files

Exemplul 2: CREATE_NEW: nu suprascrie din greșeală

A doua scriere eșuează, pentru că fișierul există deja.

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
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 factura = Path.of("factura-001.txt");
        Files.writeString(factura, "Client: Ana Popescu\nTotal: 250 lei\n", StandardOpenOption.CREATE_NEW);
        System.out.println("Factura a fost creată.");
        try {
            Files.writeString(factura, "altceva", StandardOpenOption.CREATE_NEW);
        } catch (FileAlreadyExistsException e) {
            System.out.println("Există deja: " + e.getMessage());
        }
        System.out.print(Files.readString(factura));
    }
}

Rezultat

Factura a fost creată.
Există deja: factura-001.txt
Client: Ana Popescu
Total: 250 lei

Greșeli frecvente

  • Te aștepți ca a doua apelare să adauge textul. Fără APPEND, conținutul vechi se pierde.
  • Folosești APPEND singur pe un fișier care nu există: primești NoSuchFileException. Adaugă și StandardOpenOption.CREATE.
  • Scrii într-un folder care nu există: NoSuchFileException. Creează-l înainte cu Files.createDirectories.

Comenzi înrudite

  • Files.readString: Citește tot conținutul unui fișier text într-un singur String (implicit în UTF-8).
  • Files.write: 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).
  • Files.newBufferedReader: Deschide un fișier pentru citire pe rânduri (BufferedReader) sau pentru scriere în bucăți (BufferedWriter), în UTF-8.
  • Files.createDirectory: createDirectory creează un singur folder; createDirectories creează și folderele părinte lipsă, fără eroare dacă există.