Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как получить список файлов в папке в 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

Функции из этого ответа

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.