fs.readFile în Node.js

Citește tot conținutul unui fișier: ca text dacă dai codificarea ("utf8"), altfel ca Buffer cu octeții bruți.

Sintaxă
import { readFile } from "node:fs/promises";
const text = await readFile(cale, "utf8");
const octeti = await readFile(cale);

Ce face fs.readFile

readFile din node:fs/promises deschide fișierul, îl citește complet în memorie și îl închide. Întoarce o promisiune, așa că o folosești cu await. Dacă dai codificarea ("utf8" sau { encoding: "utf8" }), primești un șir de caractere; fără codificare primești un Buffer, adică octeții fișierului.

Modulul node:fs are aceeași funcție în încă două forme: readFileSync(cale, "utf8"), care blochează programul până termină citirea (potrivită pentru scripturi scurte și configurări la pornire), și readFile(cale, "utf8", callback), forma veche cu funcție apelată la final. În cod nou, varianta cu promisiuni este cea mai ușor de citit.

Pentru fișiere foarte mari (sute de MB, jurnale) nu citi tot dintr-odată: folosește un stream (createReadStream) sau readline, care procesează fișierul pe bucăți.

Parametri

Parametru Descriere
cale Calea fișierului (text, Buffer sau URL file:). O cale relativă pornește din directorul curent (process.cwd()), nu din directorul scriptului.
opțiuni Codificarea ca text ("utf8") sau un obiect: encoding, flag (implicit "r"), signal (un AbortSignal pentru anulare).

Ce returnează

O promisiune care se rezolvă cu un șir (dacă ai dat codificarea) sau cu un Buffer. Dacă fișierul nu există, promisiunea este respinsă cu o eroare cu code: "ENOENT".

Exemple

Exemplul 1: Citirea unui fișier text

Exemplul creează întâi fișierul, apoi îl citește ca text și numără rândurile.

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

await writeFile("note.txt", "Ana 9\nIon 7\nMaria 10\n");

const text = await readFile("note.txt", "utf8");
const randuri = text.trim().split("\n");
console.log(`Am citit ${randuri.length} rânduri`);
for (const rand of randuri) {
  const [nume, nota] = rand.split(" ");
  console.log(`${nume}: ${nota}`);
}

Rezultat

Am citit 3 rânduri
Ana: 9
Ion: 7
Maria: 10

Exemplul 2: Fișier JSON și fișier lipsă

Erorile de fișier au un code: ENOENT înseamnă că fișierul nu există. Așa poți folosi valori implicite când lipsește configurarea.

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

await writeFile("config.json", JSON.stringify({ oras: "Iași", moneda: "lei" }));

async function citesteJson(cale, implicit) {
  try {
    return JSON.parse(await readFile(cale, "utf8"));
  } catch (eroare) {
    if (eroare.code === "ENOENT") return implicit;
    throw eroare;
  }
}

console.log(await citesteJson("config.json", {}));
console.log(await citesteJson("lipsa.json", { oras: "necunoscut" }));

Rezultat

{ oras: 'Iași', moneda: 'lei' }
{ oras: 'necunoscut' }

Exemplul 3: Text sau octeți, sincron sau asincron

Fără codificare primești un Buffer. readFileSync face același lucru, dar blochează programul până termină.

import { readFileSync, writeFileSync } from "node:fs";

writeFileSync("oras.txt", "Iași");

const octeti = readFileSync("oras.txt");
console.log(octeti);
console.log("Octeți:", octeti.length, "| caractere:", octeti.toString("utf8").length);
console.log(readFileSync("oras.txt", "utf8"));

Rezultat

<Buffer 49 61 c8 99 69>
Octeți: 5 | caractere: 4
Iași

Greșeli frecvente

  • Uiți codificarea și afișezi un <Buffer ...> în loc de text. Dă "utf8" ca al doilea argument.
  • Calea relativă pornește din directorul din care ai dat comanda node, nu din directorul scriptului. Pentru fișiere de lângă script folosește import.meta.dirname sau new URL("./date.json", import.meta.url).
  • Folosești readFileSync într-un server web: fiecare cerere blochează toate celelalte cereri până termină citirea. În server folosește varianta cu promisiuni.
  • Verifici întâi cu existsSync și abia apoi citești: între cele două operații fișierul poate dispărea. Mai sigur este să citești direct și să tratezi eroarea ENOENT.

Comenzi înrudite

  • fs.writeFile / fs.appendFile: Scrie un fișier (îl creează sau îl suprascrie) ori adaugă text la sfârșitul lui, cu appendFile.
  • fs.stat / fs.access / existsSync: Află informații despre un fișier (tip, mărime, date), verifică dacă există și dacă poate fi citit sau scris.
  • import.meta.dirname / filename: Calea directorului și a fișierului modulului curent: înlocuitorii pentru __dirname și __filename în module ES.
  • Buffer: Șir de octeți din Node.js: date binare din fișiere, rețea sau criptografie, cu conversii în text, hex și base64.
  • readline (citire pe rânduri): Citește un fișier sau tastatura rând cu rând și pune întrebări utilizatorului în terminal (question).
  • stream.pipeline: Leagă stream-uri în lanț (citire → transformare → scriere), cu tratarea erorilor și închiderea tuturor la final.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: fs.readFile

Ai o nelămurire despre utilizarea comenzii fs.readFile sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.