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șteimport.meta.dirnamesaunew 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 eroareaENOENT.
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.
Întrebări & Exemple de Cod:
fs.readFileAi o nelămurire despre utilizarea comenzii
fs.readFilesau 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.