Как получить список файлов в папке в Node.js
Короткий ответ
readdir() возвращает имена всего, что лежит в папке:
import { mkdir, readdir, writeFile } from 'node:fs/promises';
await mkdir('photos/2025', { recursive: true });
await writeFile('photos/a.jpg', '');
await writeFile('photos/b.png', '');
await writeFile('photos/notes.txt', '');
console.log((await readdir('photos')).sort());Результат:
[ '2025', 'a.jpg', 'b.png', 'notes.txt' ]Файлы и папки отдельно
С withFileTypes: true каждая запись умеет сказать, файл это или папка:
import { mkdir, readdir, writeFile } from 'node:fs/promises';
await mkdir('project/src', { recursive: true });
await writeFile('project/README.md', '');
const entries = await readdir('project', { withFileTypes: true });
for (const entry of entries) {
console.log(entry.name, entry.isDirectory() ? 'folder' : 'file');
}Результат:
README.md file
src folderПо расширению
Отфильтруйте имена через extname() из node:path:
import { mkdir, readdir, writeFile } from 'node:fs/promises';
import { extname } from 'node:path';
await mkdir('images', { recursive: true });
for (const name of ['cat.jpg', 'dog.JPG', 'list.txt']) await writeFile(`images/${name}`, '');
const images = (await readdir('images')).filter((name) => extname(name).toLowerCase() === '.jpg');
console.log(images.sort().join(', '));Результат:
cat.jpg, dog.JPGС подпапками
Параметр recursive выводит и содержимое всех подпапок:
import { mkdir, readdir, writeFile } from 'node:fs/promises';
await mkdir('docs/guides', { recursive: true });
await writeFile('docs/index.md', '');
await writeFile('docs/guides/start.md', '');
const all = await readdir('docs', { recursive: true });
console.log(all.map((name) => name.replaceAll('\\', '/')).sort().join(', '));Результат:
guides, guides/start.md, index.mdЧастая ошибка
readdir() возвращает только имена, а не полные пути. Чтобы открыть файл, соедините папку и имя через join():
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
import { join } from 'node:path';
await mkdir('data', { recursive: true });
await writeFile('data/a.txt', 'content of a');
for (const name of await readdir('data')) {
console.log(await readFile(join('data', name), 'utf8'));
}Результат:
content of aФункции из этого ответа
- Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
- Array.prototype.sort — Сортирует элементы массива.