Вступ
Node.js виступає як потужний інструмент для розробки веб-проєктів, пропонуючи різноманітні модулі та можливості. Серед них важливу роль відіграє модуль fs
, який забезпечує функції для взаємодії з файловою системою. Завдяки fs
розробники можуть легко і ефективно створювати, зчитувати, редагувати та видаляти файли, що робить його необхідним елементом для будь-якого застосунку Node.js.
У цій статті ми розглянемо ключові функції модуля fs
в Node.js, зосереджуючись на основних операціях: генерації, зчитуванні та модифікації файлів. Ви ознайомитесь з різними методами, які надає fs
, а також з рекомендаціями щодо їх застосування для підвищення надійності та продуктивності вашого коду.
Створення файлів
Створення нового файлу в Node.js є відносно простим процесом. Модуль fs
надає функцію writeFile()
, яка дозволяє зберігати інформацію у файл. У випадку, якщо файл не існує, він буде автоматично створений.
Приклад:
const fs = require('fs');
const вмістФайлу = 'Це текст, який буде записаний до файлу.';
fs.writeFile('мійФайл.txt', вмістФайлу, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Файл успішно створено!');
}
});
У наведеному прикладі ми використовуємо fs.writeFile()
для запису рядка вмістФайлу
до файлу з назвою мійФайл.txt
. Ця функція приймає три аргументи:
* Адреса файлу: Вказує на файл, який потрібно створити або переписати.
* Інформація для запису: Рядок, який необхідно зберегти у файл.
* Зворотний виклик: Функція, яка буде виконана після завершення запису.
Важливі моменти:
* Якщо файл вже існує, writeFile()
замінить його вміст.
* Некоректно вказаний шлях до файлу призведе до виникнення помилки.
* Обов’язково слід обробляти помилки за допомогою зворотного виклику.
Зчитування файлів
Для отримання даних з файлу в Node.js існує функція readFile()
. Ця функція зчитує вміст файлу як буфер або як текстовий рядок.
Приклад:
const fs = require('fs');
fs.readFile('мійФайл.txt', 'utf-8', (помилка, дані) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Інформація з файлу: ', дані);
}
});
У цьому випадку ми використовуємо fs.readFile()
для зчитування вмісту файлу мійФайл.txt
у кодуванні UTF-8. Функція приймає три параметри:
* Адреса файлу: Вказує на файл, з якого потрібно отримати дані.
* Кодування: Визначає кодування, яке необхідно використовувати для читання інформації.
* Зворотний виклик: Функція, яка буде викликана після завершення читання.
Важливі моменти:
* Якщо файл не знайдено, з’явиться помилка.
* Якщо кодування не вказано, за замовчуванням буде використано binary
.
* Інформація, отримана з файлу, буде представлена у вигляді буфера, якщо не вказано іншого кодування.
Запис у файл
Крім перезапису всього вмісту, модуль fs
дозволяє додавати дані до файлу без його перезапису. Це можливо завдяки функції appendFile()
.
Приклад:
const fs = require('fs');
const новийВміст = 'Це новий текст, який буде додано до файлу.';
fs.appendFile('мійФайл.txt', новийВміст, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Інформацію додано до файлу!');
}
});
Тут ми застосовуємо fs.appendFile()
для додавання рядка новийВміст
до файлу мійФайл.txt
. Функція приймає три аргументи:
* Адреса файлу: Визначає файл, до якого потрібно додати інформацію.
* Дані для додавання: Текст, який потрібно додати до файлу.
* Зворотний виклик: Функція, яка буде виконана після завершення операції.
Важливі моменти:
* appendFile()
додає дані в кінець файлу.
* Якщо файл не існує, він буде створений.
* Помилки завжди слід обробляти за допомогою зворотного виклику.
Обіцянки (Promises)
Модуль fs
також підтримує обіцянки (Promises), що спрощує роботу з асинхронними операціями. Для застосування обіцянок, використовуйте функції readFile
, writeFile
, appendFile
із суфіксом Promise
.
Приклад:
const fs = require('fs').promises;
const шляхДоФайлу = 'мійФайл.txt';
async function читатиІЗаписуватиФайл() {
try {
const дані = await fs.readFile(шляхДоФайлу, 'utf-8');
console.log('Інформація з файлу: ', дані);
await fs.writeFile(шляхДоФайлу, 'Новий текст додано!', 'utf-8');
console.log('Інформацію записано до файлу!');
} catch (помилка) {
console.error(помилка);
}
}
читатиІЗаписуватиФайл();
У цьому прикладі ми використали fs.promises
для роботи з обіцянками. Функція читатиІЗаписуватиФайл
є асинхронною та використовує await
для очікування завершення кожної операції. Це спрощує керування процесом виконання коду і робить його більш зрозумілим.
Висновок
Модуль fs
в Node.js є незамінним інструментом для взаємодії з файловою системою. Він надає великий набір методів для створення, зчитування, редагування та видалення файлів, а також для керування їхніми атрибутами. Розуміння основних принципів роботи з fs
відкриває широкі можливості для розробки динамічних та багатофункціональних веб-програм.
Рекомендації та найкращі практики:
* Використовуйте обіцянки (Promises) для спрощення керування асинхронними операціями.
* Завжди обробляйте помилки, використовуючи зворотні виклики або блок try...catch
.
* Обирайте відповідне кодування для читання та запису даних, щоб уникнути проблем з відображенням символів.
* Будьте обережні при роботі з файловою системою та пам’ятайте про безпеку.
Часті питання (FAQ)
1. Як перевірити, чи існує файл?
const fs = require('fs');
const шляхДоФайлу = 'мійФайл.txt';
fs.access(шляхДоФайлу, fs.constants.F_OK, (помилка) => {
if (помилка) {
console.log('Файл не існує.');
} else {
console.log('Файл існує.');
}
});
2. Як отримати розмір файлу?
const fs = require('fs');
const шляхДоФайлу = 'мійФайл.txt';
fs.stat(шляхДоФайлу, (помилка, stats) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Розмір файлу: ', stats.size);
}
});
3. Як перевірити, чи є файл каталогом?
const fs = require('fs');
const шляхДоФайлу = 'мійКаталог';
fs.stat(шляхДоФайлу, (помилка, stats) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Чи файл є каталогом: ', stats.isDirectory());
}
});
4. Як перелічити файли в каталозі?
const fs = require('fs');
const шляхДоКаталогу = 'мійКаталог';
fs.readdir(шляхДоКаталогу, (помилка, файли) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Файли в каталозі: ', файли);
}
});
5. Як створити каталог?
const fs = require('fs');
const шляхДоКаталогу = 'мійНовийКаталог';
fs.mkdir(шляхДоКаталогу, { recursive: true }, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Каталог успішно створено!');
}
});
6. Як видалити файл?
const fs = require('fs');
const шляхДоФайлу = 'мійФайл.txt';
fs.unlink(шляхДоФайлу, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Файл успішно видалено!');
}
});
7. Як видалити каталог?
const fs = require('fs');
const шляхДоКаталогу = 'мійКаталог';
fs.rmdir(шляхДоКаталогу, { recursive: true }, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Каталог успішно видалено!');
}
});
8. Як читати файли по рядках?
const fs = require('fs');
const шляхДоФайлу = 'мійФайл.txt';
const readline = require('readline').createInterface({
input: fs.createReadStream(шляхДоФайлу),
output: process.stdout,
});
readline.on('line', (рядок) => {
console.log('Рядок: ', рядок);
});
9. Як записати дані у файл, використовуючи буфер?
const fs = require('fs');
const шляхДоФайлу = 'мійФайл.txt';
const дані = Buffer.from('Це дані в буфері!');
fs.writeFile(шляхДоФайлу, дані, (помилка) => {
if (помилка) {
console.error(помилка);
} else {
console.log('Дані записано до файлу!');
}
});
10. Як отримати доступ до поточного каталогу?
const fs = require('fs');
console.log('Поточний каталог: ', process.cwd());
Теги: Node.js, FS, файлова система, створення файлів, читання файлів, запис у файл, обіцянки (Promises), асинхронне програмування, кращі практики, FAQ.