Ce face fs.readdir
readdir întoarce numele intrărilor dintr-un director: fișiere, subdirectoare, legături. Nu include . și ... Ordinea nu este garantată (depinde de sistemul de fișiere), așa că sortează lista dacă ai nevoie de o ordine anume.
Cu { withFileTypes: true } primești obiecte Dirent în loc de nume: au proprietatea name, directorul părinte în parentPath și metodele isFile(), isDirectory(), isSymbolicLink(). Așa afli tipul fără câte un stat separat pentru fiecare intrare.
Cu { recursive: true } (Node.js 20.1+) lista include și conținutul subdirectoarelor, cu căi relative de forma src/app.mjs.
Parametri
| Parametru | Descriere |
|---|---|
director |
Calea directorului de listat. |
opțiuni |
withFileTypes (obiecte Dirent), recursive (și subdirectoarele), encoding (implicit "utf8"). |
Ce returnează
O promisiune cu un tablou de nume (șiruri) sau, cu withFileTypes, de obiecte Dirent.
Exemple
Exemplul 1: Numele fișierelor, sortate
import { mkdir, writeFile, readdir } from "node:fs/promises";
await mkdir("poze");
await writeFile("poze/iasi.jpg", "");
await writeFile("poze/cluj.jpg", "");
await writeFile("poze/brasov.png", "");
const fisiere = await readdir("poze");
fisiere.sort();
console.log(fisiere);
const jpg = fisiere.filter((nume) => nume.endsWith(".jpg"));
console.log("Poze .jpg:", jpg.length);
Rezultat
[ 'brasov.png', 'cluj.jpg', 'iasi.jpg' ]
Poze .jpg: 2
Exemplul 2: Fișiere și directoare: withFileTypes
import { mkdir, writeFile, readdir } from "node:fs/promises";
await mkdir("proiect/src", { recursive: true });
await mkdir("proiect/teste");
await writeFile("proiect/package.json", "{}");
await writeFile("proiect/README.md", "# Magazin");
const intrari = await readdir("proiect", { withFileTypes: true });
intrari.sort((a, b) => a.name.localeCompare(b.name));
for (const intrare of intrari) {
const tip = intrare.isDirectory() ? "director" : "fișier";
console.log(`${tip.padEnd(8)} ${intrare.name}`);
}
Rezultat
fișier package.json
fișier README.md
director src
director teste
Exemplul 3: Tot arborele: recursive
import { mkdir, writeFile, readdir } from "node:fs/promises";
await mkdir("site/pagini/blog", { recursive: true });
await writeFile("site/index.html", "");
await writeFile("site/pagini/contact.html", "");
await writeFile("site/pagini/blog/primul-articol.html", "");
const toate = await readdir("site", { recursive: true });
console.log(toate.sort());
Rezultat
[
'index.html',
'pagini',
'pagini/blog',
'pagini/blog/primul-articol.html',
'pagini/contact.html'
]
Greșeli frecvente
- Te bazezi pe ordinea întoarsă de
readdir. Pe alt sistem de operare ordinea poate fi alta: sortează explicit. - Folosești numele primite direct ca o cale:
readdir("poze")întoarce"iasi.jpg", nu"poze/iasi.jpg". Construiește calea cupath.join("poze", nume). - Citești un director care conține fișiere ascunse (
.DS_Store,.git) și uiți să le filtrezi.
Comenzi înrudite
fs.glob: Găsește fișierele care se potrivesc cu un tipar, de exemplu „**/*.js” sau „poze/*.{jpg,png}”.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.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).path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.