Пошук уроків, статей та іншого контенту
Навчіться читати вміст файлів і записувати дані за допомогою базових методів файлової системи.
fsДля роботи з файлами в Node.js використовується вбудований модуль fs — скорочення від file system.
Модуль дає змогу:
читати вміст файлів;
створювати нові файли;
перезаписувати файли;
дописувати дані в кінець файлу;
видаляти файли.
Для сучасного асинхронного коду зручно використовувати версію модуля fs/promises:
const fs = require('node:fs/promises');Методи цього модуля повертають Promise, тому для них використовують async та await.
Метод readFile() читає вміст файлу:
const fs = require('node:fs/promises');
async function readTextFile() {
const content = await fs.readFile('message.txt', 'utf8');
console.log(content);
}
readTextFile();У цьому прикладі:
'message.txt' — шлях до файлу;
'utf8' — кодування, у якому потрібно прочитати файл;
content — текстовий вміст файлу.
Якщо файл message.txt містить:
Привіт із файлу!програма виведе:
Привіт із файлу!utf8Без другого аргументу readFile() повертає об'єкт Buffer, тобто набір байтів:
const fs = require('node:fs/promises');
async function readFileAsBuffer() {
const content = await fs.readFile('message.txt');
console.log(content);
}
readFileAsBuffer();Щоб отримати звичайний текст, вкажіть кодування:
const content = await fs.readFile('message.txt', 'utf8');Файл може не існувати, мати неправильний шлях або бути недоступним для читання. Такі помилки варто обробляти за допомогою try...catch.
const fs = require('node:fs/promises');
async function readTextFile() {
try {
const content = await fs.readFile('message.txt', 'utf8');
console.log('Вміст файлу:');
console.log(content);
} catch (error) {
console.error('Не вдалося прочитати файл:', error.message);
}
}
readTextFile();Якщо файлу немає, програма не завершиться необробленою помилкою, а виведе повідомлення.
Метод writeFile() записує дані у файл:
const fs = require('node:fs/promises');
async function writeTextFile() {
await fs.writeFile('result.txt', 'Результат роботи програми');
console.log('Дані записано у файл');
}
writeTextFile();Якщо result.txt не існує, Node.js створить його. Якщо файл уже існує, його попередній вміст буде замінено.
Для текстових даних можна явно вказати кодування:
const fs = require('node:fs/promises');
async function saveMessage() {
await fs.writeFile(
'message.txt',
'Це повідомлення з Node.js',
'utf8'
);
}
saveMessage();Метод appendFile() додає дані в кінець файлу, не видаляючи наявний вміст:
const fs = require('node:fs/promises');
async function addLogEntry() {
await fs.appendFile(
'app.log',
'Програму запущено\n',
'utf8'
);
console.log('Запис додано до журналу');
}
addLogEntry();Символ \n додає новий рядок. Якщо запустити програму кілька разів, кожен запис буде додано після попереднього.
Розглянемо приклад, який:
записує список завдань у файл;
читає цей файл;
виводить його вміст у консоль;
додає нове завдання.
const fs = require('node:fs/promises');
async function workWithTasks() {
try {
await fs.writeFile(
'tasks.txt',
'Вивчити Node.js\nСтворити першу програму',
'utf8'
);
const tasks = await fs.readFile('tasks.txt', 'utf8');
console.log('Поточні завдання:');
console.log(tasks);
await fs.appendFile(
'tasks.txt',
'\nПовторити роботу з файлами',
'utf8'
);
console.log('Нове завдання додано');
} catch (error) {
console.error('Помилка під час роботи з файлом:', error.message);
}
}
workWithTasks();Збережіть код у файлі app.js, а потім запустіть:
node app.jsПісля запуску в поточній папці з'явиться файл tasks.txt.
Операції з файлами можуть виконуватися не миттєво. Ключове слово await дає змогу дочекатися завершення попередньої операції:
await fs.writeFile('data.txt', 'Перший текст', 'utf8');
const content = await fs.readFile('data.txt', 'utf8');
console.log(content);Спочатку текст буде записано, потім файл буде прочитано. Без await читання може розпочатися до завершення запису.
Усі виклики з await мають бути всередині функції, оголошеної з async.
Якщо вказати лише ім'я файлу:
await fs.readFile('data.txt', 'utf8');Node.js шукатиме файл у поточній робочій папці — тій, з якої запущено команду node.
Наприклад, якщо структура проєкту така:
project/
app.js
data.txtі програму запущено з папки project, шлях 'data.txt' звертається до потрібного файлу.
Файл також можна записати у вкладену папку:
await fs.writeFile('data/result.txt', 'Готово', 'utf8');Папка data вже має існувати. Метод writeFile() не створює відсутні батьківські папки автоматично.
| Метод | Призначення | |---|---| | readFile() | прочитати файл | | writeFile() | створити або повністю перезаписати файл | | appendFile() | додати дані в кінець файлу |
Приклад короткого використання:
const fs = require('node:fs/promises');
async function main() {
const text = await fs.readFile('input.txt', 'utf8');
await fs.writeFile('output.txt', text.toUpperCase(), 'utf8');
await fs.appendFile('output.txt', '\nФайл оброблено.', 'utf8');
}
main().catch((error) => {
console.error('Помилка:', error.message);
});У цьому прикладі:
input.txt читається як текст;
текст переводиться у верхній регістр;
результат записується в output.txt;
до результату додається додатковий рядок.
const content = await fs.readFile('message.txt');У такому випадку content буде Buffer. Для отримання тексту використовуйте:
const content = await fs.readFile('message.txt', 'utf8');writeFile() видаляє попередній вміст файлу:
await fs.writeFile('log.txt', 'Новий запис');Якщо потрібно зберегти старий вміст і додати новий, використовуйте appendFile():
await fs.appendFile('log.txt', 'Новий запис\n', 'utf8');Якщо Node.js не знаходить файл, перевірте:
назву файлу;
розширення;
назву папки;
папку, з якої запускається команда node.
awaitconst content = fs.readFile('message.txt', 'utf8');
console.log(content);У змінній content буде Promise, а не текст. Правильний варіант:
const content = await fs.readFile('message.txt', 'utf8');
console.log(content);Якщо файл може бути відсутнім або недоступним, використовуйте try...catch або обробник catch():
main().catch((error) => {
console.error(error.message);
});Для роботи з файлами в Node.js використовується вбудований модуль node:fs/promises.
readFile() читає вміст файлу.
writeFile() створює файл або повністю замінює його вміст.
appendFile() додає дані в кінець файлу.
Для читання тексту потрібно вказувати кодування 'utf8'.
Асинхронні операції з файлами потрібно очікувати за допомогою await.
Помилки читання та запису варто обробляти через try...catch.