Node FS – NodeJS Створити файл, прочитати файл, записати у файл

Вступ

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.