Робота з файлами
Модуль FileSystem
Модуль FileSystem відповідає за роботу з файлами в Node.js.
const fs = require('fs');Сучасна ініціалізація модуля з промісами відбувається наступним чином:
const fs = require('fs').promises;Методи, які найбільше використовують для основних операцій з файлами:
fs.readFile(filename, [options]) - читання файлу
fs.writeFile(filename, data, [options]) - запис файлу
fs.appendFile(filename, data, [options])- додавання у файл
fs.rename(oldPath, newPath) - перейменування файлу
fs.unlink(path, callback) - видалення файлу
Синхронна робота з файлами
Методи бувають синхронні і асинхронні (про це вказує його назва - закінчується на Sync). Краще вживати без Sync у назві, бо якщо буде великий файл для читання, то дія заблокується поки не обробиться процес читання.
fs.readFileSync();
fs.readFile();Потрібно підключати так:
Але в такому разі всі підключені функції не повертають проміс і їм необхідний callback. Синхронним функціям callback не потрібен, бо вони є блокувальними і тому вони не рекомендовані до застосування, тільки якщо це вимагає поточне завдання, і ви чітко розумієте навіщо ви їх використовуєте.
JS-доки
Також можна вказувати яке значення повертатиме функція.
void - в даному випадку означає null або undefined. Можна вказати, що функція повертатиме number або string тощо.
Читання файлу. Buffer
При роботі з файлами всі функції мають бути асинхронні. Бо ми не можемо знати наперед коли буде результат опрацювання команди. Те ж саме стосується роботи з мережею або запитом на REST API.
Також не забуваємо обробляти помилки. Використовуємо синтаксис .then().catch(); або async/await в поєднанні з try{} catch(){}
Створимо невеликий текстовий файл readme.txt, в якому запишемо якусь невелику фразу. Тоді функція читання цього файлу виглядатиме так:
або ось так
Параметр data у функції readFile, містить об'єкт типу Buffer. Це - послідовність прочитаних байтів (тобто сирі дані).
Отримання валідних даних при читанні
Найпростіший спосіб працювати з отриманими даними як з рядком - необхідно конвертувати data методом toString().
або ось так
Після такої операції ми вже отримаємо не бінарний код, а зрозумілий рядковий формат даних.
Опрацювання шляхів до файлу
Припустимо, що файл, який потрібно зчитати зберігається у папці documents, яка своєю чергою лежить у папці files.
В такому разі нам доведеться прописати повний шлях до файлу.
Утім тут є складність в тому, що операційні системи macOS та Unix проставляють в шляхах такий слеш /, а в операційній системі windows такий \. Тому код шляху, який працюватиме в одні ос, не працюватиме в іншій. Для вирішення цього ньюансу є модуль path.
Підключення:
В такому разі ми просто через кому передаємо кожен рівень шляху до файлу, а цей модуль path поставить правильні слеші за нас.
Читання/запис JSON-файлу
Припустімо, що маємо таку структуру проєкту
Зчитаймо вміст sample.json, внесемо зміни та збережемо у новий файл newJson.json на рівні з index.js.
Читання каталогу
У цьому прикладі ми будемо використовувати два методи readdir (для читання директорії) і stat (для отримання статистики).
Напишімо скрипт files.js, який читатиме поточний каталог та виводити його вміст: ім'я файлу, його розмір та дату останньої зміни.
__dirname - повертає абсолютний шлях поточного каталогу.
У наслідку виконання промісу в змінній files міститься масив імен файлів та директорій з поточної директорії. Потім ми повертаємо масив промісів з аналізом кожного елемента цього масиву.
Провести аналіз допомагає змінна stats, де міститься інформація про поточний файл. Тут повертається ім'я файлу, час останньої зміни stats.mtime та розмір у байтах stats.size.
Результат виконання промісу, змінна result, передається функції console.table. В результаті на екран виводиться таблиця виконання скрипту в консолі.
Різновидом отримання статистики про файл є метод lstat.
Корисним методом також буде перевірка чи є елемент в директорії папкою чи файлом isDirectory.
Покликання:
Last updated