Робота з файлами
Модуль 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
і отримуємо красиву таблицю при виконанні нашого скрипту у
консолі