Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить модуль fs у Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`fs` (File System) - вбудований модуль Node.js для операцій із файлами й папками: читання, запис, видалення, копіювання, спостереження за змінами - у синхронному, callback- чи проміс-варіанті (`fs/promises`). **Ключове:** для великих файлів краще використовувати потоки (`createReadStream`/`createWriteStream`), бо вони не завантажують увесь вміст у пам'ять.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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-, і в проміс-вигляді.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.