fs.writeFile / fs.appendFile în Node.js

Fișiere și căi (fs, path) Node.js 10.0 (fs/promises)

Scrie un fișier (îl creează sau îl suprascrie) ori adaugă text la sfârșitul lui, cu appendFile.

Sintaxă
import { writeFile, appendFile } from "node:fs/promises";
await writeFile(cale, date[, opțiuni]);
await appendFile(cale, date[, opțiuni]);

Ce face fs.writeFile / fs.appendFile

writeFile scrie datele într-un fișier. Dacă fișierul nu există, îl creează; dacă există, îi înlocuiește tot conținutul. Datele pot fi text (scris implicit în UTF-8), Buffer sau un tablou de octeți.

appendFile adaugă datele la sfârșitul fișierului, fără să șteargă ce era înainte, și creează fișierul dacă lipsește. Este potrivită pentru jurnale simple.

Cu opțiunea flag schimbi modul de deschidere. { flag: "wx" } creează fișierul doar dacă nu există; dacă există, operația eșuează cu EEXIST, așa că nu suprascrii din greșeală un fișier important. Directorul în care scrii trebuie să existe deja (vezi mkdir).

Parametri

Parametru Descriere
cale Fișierul în care scrii.
date Text, Buffer, tablou de octeți sau un iterabil / stream cu bucăți de date.
opțiuni Codificarea ca text sau un obiect: encoding (implicit "utf8"), mode (permisiunile fișierului nou, implicit 0o666), flag ("w" la writeFile, "a" la appendFile, "wx" pentru „doar fișier nou”), signal.

Ce returnează

O promisiune care se rezolvă cu undefined după ce datele au fost scrise.

Exemple

Exemplul 1: Scriere, suprascriere și citire

import { writeFile, readFile } from "node:fs/promises";

await writeFile("salut.txt", "Bună ziua, Ana!\n");
console.log(await readFile("salut.txt", "utf8"));

await writeFile("salut.txt", "Bună seara, Ion!\n");
console.log(await readFile("salut.txt", "utf8"));

Rezultat

Bună ziua, Ana!

Bună seara, Ion!

Exemplul 2: Un jurnal cu appendFile

Fiecare apel adaugă un rând. Valorile sunt fixe ca exemplul să dea mereu același rezultat; într-o aplicație reală ai pune și ora.

import { appendFile, readFile } from "node:fs/promises";

const comenzi = [
  { client: "Ana", total: 120.5 },
  { client: "Mihai", total: 89 },
  { client: "Elena", total: 245 },
];

for (const comanda of comenzi) {
  await appendFile("comenzi.log", `${comanda.client};${comanda.total} lei\n`);
}

console.log(await readFile("comenzi.log", "utf8"));

Rezultat

Ana;120.5 lei
Mihai;89 lei
Elena;245 lei

Exemplul 3: Fișier nou, fără suprascriere: flag „wx”

import { writeFile } from "node:fs/promises";

const date = JSON.stringify({ nume: "Ana", oras: "Iași" }, null, 2);

await writeFile("profil.json", date, { flag: "wx" });
console.log("Prima scriere: fișierul a fost creat");

try {
  await writeFile("profil.json", "{}", { flag: "wx" });
} catch (eroare) {
  console.log("A doua scriere a eșuat:", eroare.code);
}

Rezultat

Prima scriere: fișierul a fost creat
A doua scriere a eșuat: EEXIST

Greșeli frecvente

  • Folosești writeFile când voiai să adaugi: tot conținutul vechi dispare. Pentru adăugare folosește appendFile sau { flag: "a" }.
  • Scrii într-un director care nu există și primești ENOENT. Creează-l înainte cu mkdir(director, { recursive: true }).
  • Dai un obiect direct ca date. writeFile nu transformă obiectele în JSON: scrie JSON.stringify(obiect).
  • Pornești mai multe writeFile pe același fișier fără await: scrierile se pot amesteca. Așteaptă fiecare scriere înainte de următoarea.

Comenzi înrudite

  • fs.readFile: Citește tot conținutul unui fișier: ca text dacă dai codificarea („utf8”), altfel ca Buffer cu octeții bruți.
  • fs.mkdir / fs.mkdtemp: Creează un director (cu toți părinții lipsă, prin recursive: true) sau un director temporar cu nume unic (mkdtemp).
  • fs.rename / fs.copyFile / fs.cp: Mută sau redenumește un fișier (rename), copiază un fișier (copyFile) ori un director întreg (cp cu recursive).
  • stream.pipeline: Leagă stream-uri în lanț (citire → transformare → scriere), cu tratarea erorilor și închiderea tuturor la final.
  • Buffer: Șir de octeți din Node.js: date binare din fișiere, rețea sau criptografie, cu conversii în text, hex și base64.