Skip to main content

Що робить модуль fs у Node.js?

1. Що таке модуль fs

fs (File System) - вбудований модуль Node.js, який дозволяє виконувати операції з файлами й папками за допомогою JavaScript.

Він працює поверх системних API (Windows, Linux, macOS) і надає два режими роботи:

  • синхронний (блокує потік),
  • асинхронний (через callback-и, проміси чи async/await).

2. Підключення модуля

У CommonJS:

javascript
const fs = require('fs');

У ES Modules:

javascript
import fs from 'fs';

3. Основні можливості fs

КатегоріяПриклади методів
Читання файлівreadFile, readFileSync, createReadStream
Запис файлівwriteFile, appendFile, createWriteStream
Робота з каталогамиmkdir, readdir, rmdir, rename
Видаленняunlink, rm
Інформація про файлstat, lstat, access, existsSync
Копіювання / переміщенняcopyFile, rename
Спостереження за файламиwatch, watchFile

4. Приклади основних операцій

Читання файлу (асинхронно)

javascript
import fs from 'fs'; fs.readFile('./data.txt', 'utf8', (err, data) => { if (err) throw err; console.log('Вміст файлу:', data); });

Читання файлу (через проміси)

Сучасний спосіб:

javascript
import { readFile } from 'fs/promises'; const text = await readFile('./data.txt', 'utf8'); console.log(text);

Модуль fs/promises - це проміс-версія fs, ідеальна для async/await.

Запис у файл

javascript
import fs from 'fs'; fs.writeFile('./output.txt', 'Hello, Node.js!', (err) => { if (err) throw err; console.log('Файл створено!'); });

Якщо файлу немає - буде створений. Якщо є - вміст перезапишеться.

Додавання в кінець файлу

javascript
import fs from 'fs'; fs.appendFile('./log.txt', 'Новий запис\n', (err) => { if (err) throw err; console.log('Запис додано!'); });

Створення папки

javascript
import fs from 'fs'; fs.mkdir('./uploads', { recursive: true }, (err) => { if (err) throw err; console.log('Папку створено!'); });

{ recursive: true } створює всі вкладені директорії, якщо їх немає.

Читання вмісту директорії

javascript
import fs from 'fs'; fs.readdir('./', (err, files) => { if (err) throw err; console.log('Файли в папці:', files); });

Вивід:

javascript
['app.js', 'package.json', 'data.txt']

Видалення файлу

javascript
import fs from 'fs'; fs.unlink('./output.txt', (err) => { if (err) throw err; console.log('Файл видалено!'); });

Отримання інформації про файл

javascript
import fs from 'fs'; fs.stat('./data.txt', (err, stats) => { if (err) throw err; console.log('Розмір:', stats.size); console.log('Дата зміни:', stats.mtime); });

Приклад об'єкта stats:

javascript
Stats { size: 1024, isFile: [Function: isFile], isDirectory: [Function: isDirectory], mtime: 2025-10-19T10:00:00Z }

5. Потокове читання й запис (Streams)

Для роботи з великими файлами краще використовувати потоки (stream API).

Потокове читання:

javascript
const readStream = fs.createReadStream('./bigfile.txt', 'utf8'); readStream.on('data', (chunk) => { console.log('Частина файлу:', chunk); }); readStream.on('end', () => { console.log('Читання завершено!'); });

Потоковий запис:

javascript
const writeStream = fs.createWriteStream('./output.txt'); writeStream.write('Перший рядок\n'); writeStream.write('Другий рядок\n'); writeStream.end('Файл записано!');

Потоки зручні для роботи з величезними файлами - вони не завантажують увесь файл у пам'ять.

6. Спостереження за файлами

javascript
fs.watch('./data.txt', (eventType, filename) => { console.log(`Зміна: ${eventType} у файлі ${filename}`); });

Дозволяє відстежувати зміни - зручно для live-reload, логів, hot-reload серверів тощо.

7. Асинхронний vs синхронний API

Node.js надає обидві версії майже для кожної функції:

Асинхронна (рекомендується)Синхронна (блокує потік)
fs.readFile(path, cb)fs.readFileSync(path)
fs.writeFile(path, data, cb)fs.writeFileSync(path, data)
fs.mkdir(path, cb)fs.mkdirSync(path)
fs.readdir(path, cb)fs.readdirSync(path)

Синхронні методи зупиняють виконання решти коду, тому використовуються рідко - наприклад, під час запуску конфігурації.

8. Модуль fs/promises

Сучасна альтернатива:

javascript
import { mkdir, readFile, writeFile } from 'fs/promises'; await mkdir('./data', { recursive: true }); await writeFile('./data/info.txt', 'Hello!'); const text = await readFile('./data/info.txt', 'utf8'); console.log(text);

Працює повністю на Promise - без callback-ів, ідеально для async/await.

9. Приклад реального сценарію

Копіювання файлу:

javascript
import { readFile, writeFile } from 'fs/promises'; async function copyFile(src, dest) { const data = await readFile(src); await writeFile(dest, data); console.log('Файл успішно скопійовано!'); } await copyFile('./data.txt', './backup.txt');

10. Часто вживані методи

МетодПризначення
readFile(path, [options], callback)Читання файлу
writeFile(path, data, [options], callback)Запис файлу
appendFile(path, data, callback)Додавання в кінець
unlink(path, callback)Видалення файлу
rename(oldPath, newPath, callback)Перейменування
mkdir(path, [options], callback)Створення папки
readdir(path, callback)Читання папки
stat(path, callback)Інформація про файл
watch(path, listener)Відстеження змін

Одним реченням

Модуль fs - це вбудований API Node.js для роботи з файлами й каталогами (читання, запис, копіювання, потоки, спостереження), доступний і в callback-, і в проміс-вигляді.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.