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

Node.js FS: Майстерність роботи з файлами

Вступ

Node.js – це потужна платформа для розробки веб-додатків, яка володіє великою кількістю модулів та можливостей. Одним з ключових елементів Node.js є модуль fs, що надає функції для обробки файлової системи. За допомогою fs ви можете легко створювати, читати, записувати та видаляти файли, що робить його незамінним інструментом для будь-якого розробника Node.js.

Ця стаття детально розгляне можливості Node.js fs модуля, зосередившись на трьох ключових операціях: створення, читання та запису файлів. Ви дізнаєтеся про різні методи, які надає fs, а також про кращі практики використання цих методів для забезпечення безпеки та ефективності вашого коду.

Створення файлів

Створення нового файлу в Node.js є простим завданням. fs модуль надає функцію writeFile(), яка дозволяє записати дані у файл. Якщо файл не існує, він автоматично буде створений.

Приклад:

javascript
const fs = require('fs');

const fileContent = 'Це текст, який буде записаний у файл.';

fs.writeFile('myFile.txt', fileContent, (err) => {
if (err) {
console.error(err);
} else {
console.log('Файл успішно створено!');
}
});

У цьому прикладі ми використовуємо fs.writeFile() для запису рядка fileContent у файл з назвою myFile.txt. Функція приймає три аргументи:

* Шлях до файлу: Вказує на файл, який необхідно створити або перезаписати.
* Дані для запису: Текст, який потрібно записати в файл.
* Зворотний виклик: Функція, яка буде викликана після завершення запису.

Важливі моменти:

* Якщо файл уже існує, writeFile() його перезапише.
* Якщо шлях до файлу не вказаний коректно, виникне помилка.
* Завжди слід обробляти помилки, використовуючи зворотний виклик.

Читання файлів

Для читання даних з файлу Node.js надає функцію readFile(). readFile() дозволяє читати вміст файлу як буфер або як рядок.

Приклад:

javascript
const fs = require('fs');

fs.readFile('myFile.txt', 'utf-8', (err, data) => {
if (err) {
console.error(err);
} else {
console.log('Дані з файлу: ', data);
}
});

У цьому прикладі ми використовуємо fs.readFile() для читання вмісту файлу myFile.txt в кодуванні UTF-8. Функція приймає три аргументи:

* Шлях до файлу: Вказує на файл, який потрібно прочитати.
* Кодування: Вказує кодування, яке потрібно використовувати для читання даних.
* Зворотний виклик: Функція, яка буде викликана після завершення читання.

Важливі моменти:

* Якщо файл не знайдений, виникне помилка.
* Якщо кодування не вказано, за замовчуванням буде використано binary.
* Дані, отримані з файлу, будуть у вигляді буфера, якщо не вказано інше кодування.

Запис у файл

Окрім перезапису всього вмісту файлу, fs модуль дозволяє також записувати дані в файл, не перезаписуючи його. Це можна зробити за допомогою функції appendFile().

Приклад:

javascript
const fs = require('fs');

const newContent = 'Це новий текст, який буде доданий до файлу.';

fs.appendFile('myFile.txt', newContent, (err) => {
if (err) {
console.error(err);
} else {
console.log('Дані додано до файлу!');
}
});

У цьому прикладі ми використовуємо fs.appendFile() для додавання рядка newContent до файлу myFile.txt. Функція приймає три аргументи:

* Шлях до файлу: Вказує на файл, до якого потрібно додати дані.
* Дані для додавання: Текст, якій потрібно додати до файлу.
* Зворотний виклик: Функція, яка буде викликана після завершення додавання.

Важливі моменти:

* appendFile() додає дані до кінця файлу.
* Якщо файл не існує, він буде створений.
* Завжди слід обробляти помилки, використовуючи зворотний виклик.

Обецянки (Promises)

fs модуль також підтримує обіцянки (Promises), що спрощує роботу з асинхронними операціями. Для використання обіцянок, використовуйте функції readFile, writeFile, appendFile з суфіксом Promise.

Приклад:

javascript
const fs = require('fs').promises;

const filePath = 'myFile.txt';

async function readAndWriteFile() {
try {
const data = await fs.readFile(filePath, 'utf-8');
console.log('Дані з файлу: ', data);
await fs.writeFile(filePath, 'Новий текст додано!', 'utf-8');
console.log('Дані записано до файлу!');
} catch (err) {
console.error(err);
}
}

readAndWriteFile();

У цьому прикладі ми використали fs.promises для використання обіцянок.
Функція readAndWriteFile асинхронна і використовує await для очікування завершення кожної операції. Це спрощує управління потоком виконання коду і робить його більш зрозумілим.

Висновок

fs модуль Node.js є незамінним інструментом для роботи з файловою системою. Він надає широкий спектр методів для створення, читання, запису та видалення файлів, а також для управління атрибутами файлів. Розуміння основ роботи з fs відкриває широкі можливості для створення динамічних та функціональних веб-додатків.

Поради та кращі практики:

* Використовуйте обіцянки (Promises) для спрощення управління асинхронними операціями.
* Завжди обробляйте помилки, використовуючи зворотні виклики або блоку try...catch.
* Виберіть правильне кодування для читання та запису даних, щоб уникнути проблем з кодуванням.
* Будьте обережні при роботі з файловою системою та не забувайте про безпеку.

Часті питання (FAQ)

1. Як перевірити, чи файл існує?

javascript
const fs = require('fs');
const filePath = 'myFile.txt';

fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
console.log('Файл не існує.');
} else {
console.log('Файл існує.');
}
});

2. Як отримати розмір файлу?

javascript
const fs = require('fs');
const filePath = 'myFile.txt';

fs.stat(filePath, (err, stats) => {
if (err) {
console.error(err);
} else {
console.log('Розмір файлу: ', stats.size);
}
});

3. Як перевірити, чи файл є каталогом?

javascript
const fs = require('fs');
const filePath = 'myDirectory';

fs.stat(filePath, (err, stats) => {
if (err) {
console.error(err);
} else {
console.log('Чи файл є каталогом: ', stats.isDirectory());
}
});

4. Як перелічити файли в каталозі?

javascript
const fs = require('fs');
const directoryPath = 'myDirectory';

fs.readdir(directoryPath, (err, files) => {
if (err) {
console.error(err);
} else {
console.log('Файли в каталозі: ', files);
}
});

5. Як створити каталог?

javascript
const fs = require('fs');
const directoryPath = 'myNewDirectory';

fs.mkdir(directoryPath, { recursive: true }, (err) => {
if (err) {
console.error(err);
} else {
console.log('Каталог успішно створено!');
}
});

6. Як видалити файл?

javascript
const fs = require('fs');
const filePath = 'myFile.txt';

fs.unlink(filePath, (err) => {
if (err) {
console.error(err);
} else {
console.log('Файл успішно видалено!');
}
});

7. Як видалити каталог?

javascript
const fs = require('fs');
const directoryPath = 'myDirectory';

fs.rmdir(directoryPath, { recursive: true }, (err) => {
if (err) {
console.error(err);
} else {
console.log('Каталог успішно видалено!');
}
});

8. Як читати файли по рядках?

javascript
const fs = require('fs');
const filePath = 'myFile.txt';

const readline = require('readline').createInterface({
input: fs.createReadStream(filePath),
output: process.stdout,
});

readline.on('line', (line) => {
console.log('Рядок: ', line);
});

9. Як записати дані у файл, використовуючи буфер?

javascript
const fs = require('fs');
const filePath = 'myFile.txt';

const data = Buffer.from('Це дані в буфері!');

fs.writeFile(filePath, data, (err) => {
if (err) {
console.error(err);
} else {
console.log('Дані записано до файлу!');
}
});

10. Як отримати доступ до поточного каталогу?

javascript
const fs = require('fs');

console.log('Поточний каталог: ', process.cwd());

Теги: Node.js, FS, файлова система, створення файлів, читання файлів, запис у файл, обіцянки (Promises), асинхронне програмування, кращі практики, FAQ.