Робота з файлами
Модуль FileSystem відповідає за роботу з файлами в Node.js. Сучасна ініціалізація модуля з промісами відбувається наступним чином:
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)- видалення файлу.
При операціях із файлами ніколи не забуваємо обробляти помилки. Крім цього
Необхідно пам'ятати, що параметр data у функції readFile, містить вже
згадуваний об'єкт типу Buffer, містить послідовність прочитаних
байтів, тобто. сирі дані. Найпростіший спосіб працювати з даними як з
рядком, необхідно конвертувати data методом toString():
fs.readFile('readme.txt')
.then(data => console.log(data.toString()))
.catch(err => console.log(err.message));
Також існують методи модуля fs з синхронними версіями, що закінчуються на
Sync. Їх необхідно підключати як
const fs = require('fs');
Але тоді всі функції, що підключаються, не повертають проміс і їм необхідний
callback. Синхронним функціям callback не потрібен, т.к. вони є
блокуючими і тому вони не рекомендовані до застосування, тільки якщо це
вимагає поточне завдання, і ви чітко розумієте навіщо ви їх використовуєте.
Давайте напишемо скрипт files.js, який читатиме поточний каталог та
виводити його вміст: ім'я файлу, його розмір та дату останньої зміни.
const fs = require('fs').promises;
fs.readdir(__dirname)
.then(files => {
return Promise.all(
files.map(async filename => {
const stats = await fs.stat(filename);
return {
Name: filename,
Size: stats.size,
Date: stats.mtime,
};
}),
);
})
.then(result => console.table(result));
Давайте розберемо цей код докладніше. Спочатку ми підключаємо стандартний
модуль fs з промісами:
const fs = require('fs').promises;
За допомогою змінної __dirname ми зчитуємо всі файли із поточного каталогу. В
внаслідок виконання промісу в змінну files ми отримаємо масив імен файлів
та директорій з поточної директорії. Потім ми повертаємо масив промісів з
аналізом кожного елемента цього масиву. Провести аналіз допомагає нам змінна
stats, куди ми отримуємо інформацію про поточний файл. Ми повертаємо об'єкт з
ім'ям файлу, а також stats.mtime час останньої зміни файлу та
stats.size, який визначає розмір файлу в байтах.
Результат виконання цього промісу, змінна result, ми віддаємо функції
console.table і отримуємо красиву таблицю при виконанні нашого скрипту у
консолі
