Практическая работа №1: Работа с файлами в Node.js
Цель работы: Освоить встроенный модуль fs Node.js для операций с файловой системой, научиться читать/записывать файлы синхронно и асинхронно, получать метаданные файлов и обрабатывать ошибки.
Работа с файлами в Node.js: модуль fs
Section titled “Работа с файлами в Node.js: модуль fs”Основные теоретические положения
Section titled “Основные теоретические положения”1. Что такое модуль fs
Section titled “1. Что такое модуль fs”Модуль fs (File System) — встроенный API Node.js для работы с файлами и директориями. Поддерживает синхронные (блокирующие) методы с суффиксом Sync и асинхронные (неблокирующие) методы с колбэками или Promise.
2. Импорт модуля
Section titled “2. Импорт модуля”const fs = require('fs'); // Классический CommonJSconst fsPromises = require('fs').promises; // Promise-based API для async/await3. Основные операции с файлами
Section titled “3. Основные операции с файлами”| Операция | Синхронный метод | Асинхронный метод | Описание |
|---|---|---|---|
| Чтение | readFileSync() | readFile() | Читает содержимое файла |
| Запись | writeFileSync() | writeFile() | Создает/перезаписывает файл |
| Дополнение | appendFileSync() | appendFile() | Добавляет данные в конец |
| Удаление | unlinkSync() | unlink() | Удаляет файл |
| Информация | statSync() | stat() | Получает метаданные |
4. Обработка ошибок
Section titled “4. Обработка ошибок”Всегда используйте try/catch для синхронных операций и проверяйте err в колбэках или используйте async/await с try/catch.
Алгоритм выполнения работы
Section titled “Алгоритм выполнения работы”1. Подготовка окружения (5 минут)
Section titled “1. Подготовка окружения (5 минут)”mkdir practice-fscd practice-fstouch index.jsnode index.js # для тестирования2. Создание и работа с файлом профиля (20 минут)
Section titled “2. Создание и работа с файлом профиля (20 минут)”- Создайте объект с личными данными
- Запишите в
profile.json - Прочитайте и выведите в консоль
3. Анализ файла и логика (30 минут)
Section titled “3. Анализ файла и логика (30 минут)”- Получите статистику файла
- Добавьте условную логику
- Реализуйте дополнение и удаление
4. Тестирование и отладка (20 минут)
Section titled “4. Тестирование и отладка (20 минут)”Примеры реализации
Section titled “Примеры реализации”Пример 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();Общие требования
Section titled “Общие требования”- Файл
index.jsс комментариями - Обработка всех ошибок
- Минимум 3 разных операции с файлами
- Условная логика на основе данных файла
Чистый, читаемый код
Задания для выполнения
Section titled “Задания для выполнения”Первая задача
Section titled “Первая задача”| № | Задача | Критерий успеха |
|---|---|---|
| 1 | Создать профиль | JSON файл profile.json с name, age, city |
| 2 | Прочитать данные | Вывод в консоль: “Имя: X, Возраст: Y” |
| 3 | Добавить дату | Текущая дата в файле и вывод в консоль |
Вторая задача
Section titled “Вторая задача”| № | Задача | Критерий успеха |
|---|---|---|
| 4 | Анализ stat | Размер > 100байт, дата создания, isFile() |
| 5 | Условия | Логика: возраст >60 “мудр”, <20 “впереди”, else “рабочий” |
| 6 | Дополнение | appendFile контактов в файл |
| 7 | Удаление | unlink если возраст < 18 |
Контрольные вопросы
Section titled “Контрольные вопросы”-
Разница
readFileSync()иreadFile()?
Sync блокирует поток, async — нет (неблокирующий) -
Какой модуль для async/await?
require('fs').promises -
Что возвращает
fs.stat()?
ОбъектStatsсsize,birthtime,isFile(),isDirectory() -
Зачем try/catch при работе с файлами?
Файл может не существовать, нет прав доступа -
Как добавить текст в конец файла?
fs.appendFile()илиfs.appendFileSync()