Перейти до основного вмісту

Робота з файлами

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

alt text

Мал. 1 - результат виконання скрипту