Skip to content

Практическая работа №1: Работа с файлами в Node.js

Цель работы: Освоить встроенный модуль fs Node.js для операций с файловой системой, научиться читать/записывать файлы синхронно и асинхронно, получать метаданные файлов и обрабатывать ошибки.

Работа с файлами в Node.js: модуль fs

Section titled “Работа с файлами в Node.js: модуль fs”

Основные теоретические положения

Section titled “Основные теоретические положения”

Модуль fs (File System) — встроенный API Node.js для работы с файлами и директориями. Поддерживает синхронные (блокирующие) методы с суффиксом Sync и асинхронные (неблокирующие) методы с колбэками или Promise.

const fs = require('fs'); // Классический CommonJS
const fsPromises = require('fs').promises; // Promise-based API для async/await

3. Основные операции с файлами

Section titled “3. Основные операции с файлами”
ОперацияСинхронный методАсинхронный методОписание
ЧтениеreadFileSync()readFile()Читает содержимое файла
ЗаписьwriteFileSync()writeFile()Создает/перезаписывает файл
ДополнениеappendFileSync()appendFile()Добавляет данные в конец
УдалениеunlinkSync()unlink()Удаляет файл
ИнформацияstatSync()stat()Получает метаданные

Всегда используйте try/catch для синхронных операций и проверяйте err в колбэках или используйте async/await с try/catch.

Алгоритм выполнения работы

Section titled “Алгоритм выполнения работы”

1. Подготовка окружения (5 минут)

Section titled “1. Подготовка окружения (5 минут)”
mkdir practice-fs
cd practice-fs
touch index.js
node index.js # для тестирования

2. Создание и работа с файлом профиля (20 минут)

Section titled “2. Создание и работа с файлом профиля (20 минут)”
  1. Создайте объект с личными данными
  2. Запишите в profile.json
  3. Прочитайте и выведите в консоль

3. Анализ файла и логика (30 минут)

Section titled “3. Анализ файла и логика (30 минут)”
  1. Получите статистику файла
  2. Добавьте условную логику
  3. Реализуйте дополнение и удаление

4. Тестирование и отладка (20 минут)

Section titled “4. Тестирование и отладка (20 минут)”

Пример 1 — Базовые операции (синхронные)

Section titled “Пример 1 — Базовые операции (синхронные)”
const fs = require('fs');
// Создание данных
const profile = {
name: "Иван Иванов",
age: 20,
city: "Москва",
updated: new Date().toLocaleDateString('ru-RU')
};
// Запись в файл
fs.writeFileSync('profile.json', JSON.stringify(profile, null, 2), 'utf8');
console.log('✅ Профиль создан');
// Чтение файла
const data = JSON.parse(fs.readFileSync('profile.json', 'utf8'));
console.log('👤', data.name, 'возраст:', data.age);

Пример 2 — Асинхронные операции с async/await

Section titled “Пример 2 — Асинхронные операции с async/await”
const fs = require('fs').promises;
async function processProfile() {
try {
// Создание и запись
const profile = { name: "Анна Петрова", age: 25, city: "СПб" };
await fs.writeFile('profile.json', JSON.stringify(profile, null, 2));
// Чтение и статистика
const data = await fs.readFile('profile.json', 'utf8');
const stats = await fs.stat('profile.json');
console.log('📊 Размер файла:', stats.size, 'байт');
console.log('📅 Создан:', stats.birthtime.toLocaleDateString());
// Логика по возрасту
const user = JSON.parse(data);
if (user.age >= 18) {
console.log('✅ Совершеннолетний');
}
} catch (error) {
console.error('❌ Ошибка:', error.message);
}
}
processProfile();
  • Файл index.js с комментариями
  • Обработка всех ошибок
  • Минимум 3 разных операции с файлами
  • Условная логика на основе данных файла
    Чистый, читаемый код

Задания для выполнения

Section titled “Задания для выполнения”
ЗадачаКритерий успеха
1Создать профильJSON файл profile.json с name, age, city
2Прочитать данныеВывод в консоль: “Имя: X, Возраст: Y”
3Добавить датуТекущая дата в файле и вывод в консоль
ЗадачаКритерий успеха
4Анализ statРазмер > 100байт, дата создания, isFile()
5УсловияЛогика: возраст >60 “мудр”, <20 “впереди”, else “рабочий”
6ДополнениеappendFile контактов в файл
7Удалениеunlink если возраст < 18
  1. Разница readFileSync() и readFile()?
    Sync блокирует поток, async — нет (неблокирующий)

  2. Какой модуль для async/await?
    require('fs').promises

  3. Что возвращает fs.stat()?
    Объект Stats с size, birthtime, isFile(), isDirectory()

  4. Зачем try/catch при работе с файлами?
    Файл может не существовать, нет прав доступа

  5. Как добавить текст в конец файла?
    fs.appendFile() или fs.appendFileSync()

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. Node.js fs документация
  2. W3Schools Node.js Files
  3. Node.js File Stats