01:07
Урок 32: Работа с файлами в Node.js

Курс по программированию на JavaScript

Урок 32: Работа с файлами в Node.js

В Node.js работа с файлами осуществляется с помощью встроенного модуля fs (file system). Этот модуль предоставляет различные методы для чтения, записи, удаления и управления файлами и директориями. В этом уроке мы рассмотрим, как выполнять основные операции с файлами в Node.js, а также как использовать асинхронные методы для эффективной работы с файлами.

Чтение файлов

Для чтения файлов в Node.js используется метод fs.readFile. Этот метод асинхронно читает содержимое файла и возвращает его в виде буфера или строки.

// Импорт модуля fs
const fs = require('fs');

// Чтение файла
fs.readFile('example.txt', 'utf8', (err, data) => {
 if (err) {
 console.error('Ошибка чтения файла:', err);
 return;
 }
 console.log('Содержимое файла:', data);
});
// Содержимое файла: (вывод содержимого файла)

Запись в файл

Для записи данных в файл используется метод fs.writeFile. Этот метод асинхронно записывает данные в файл, создавая его, если он не существует.

// Запись в файл
fs.writeFile('output.txt', 'Hello, Node.js!', 'utf8', (err) => {
 if (err) {
 console.error('Ошибка записи в файл:', err);
 return;
 }
 console.log('Данные успешно записаны в файл');
});
// Данные успешно записаны в файл

Асинхронные операции с файлами

Асинхронные методы модуля fs позволяют выполнять операции с файлами без блокировки основного потока. Это особенно полезно при работе с большими файлами или выполнении большого количества операций ввода-вывода.

Рассмотрим пример использования асинхронного метода fs.readFile и fs.writeFile для чтения данных из одного файла и записи их в другой файл.

// Чтение данных из файла и запись их в другой файл
fs.readFile('input.txt', 'utf8', (err, data) => {
 if (err) {
 console.error('Ошибка чтения файла:', err);
 return;
 }
 fs.writeFile('output.txt', data, 'utf8', (err) => {
 if (err) {
 console.error('Ошибка записи в файл:', err);
 return;
 }
 console.log('Данные успешно скопированы из input.txt в output.txt');
 });
});
// Данные успешно скопированы из input.txt в output.txt

Использование промисов и async/await

Для удобства работы с асинхронными операциями можно использовать промисы и async/await. Рассмотрим, как переписать предыдущий пример с использованием промисов и async/await.

// Импорт модуля fs и преобразование методов в промисы
const fs = require('fs').promises;

async function copyFile() {
 try {
 const data = await fs.readFile('input.txt', 'utf8');
 await fs.writeFile('output.txt', data, 'utf8');
 console.log('Данные успешно скопированы из input.txt в output.txt');
 } catch (err) {
 console.error('Ошибка:', err);
 }
}

copyFile();
// Данные успешно скопированы из input.txt в output.txt

В этом примере мы используем модуль fs с промисами и async/await для выполнения асинхронных операций чтения и записи файлов.

Упражнения

Упражнение 1: Чтение и запись файлов

Создайте скрипт, который читает содержимое файла data.txt, преобразует все символы в верхний регистр и записывает результат в новый файл uppercase.txt.

Решение:

// Импорт модуля fs
const fs = require('fs');

// Чтение и преобразование данных
fs.readFile('data.txt', 'utf8', (err, data) => {
 if (err) {
 console.error('Ошибка чтения файла:', err);
 return;
 }
 const upperCaseData = data.toUpperCase();
 fs.writeFile('uppercase.txt', upperCaseData, 'utf8', (err) => {
 if (err) {
 console.error('Ошибка записи в файл:', err);
 return;
 }
 console.log('Данные успешно записаны в файл uppercase.txt');
 });
});
// Данные успешно записаны в файл uppercase.txt

Объяснение: Мы прочитали содержимое файла data.txt, преобразовали его в верхний регистр и записали результат в файл uppercase.txt.

Упражнение 2: Асинхронное чтение и запись файлов с использованием async/await

Создайте скрипт, который читает содержимое файла info.txt, добавляет к каждому строковому значению дату и время, и записывает результат в новый файл info_with_timestamp.txt. Используйте async/await для выполнения асинхронных операций.

Решение:

// Импорт модуля fs и преобразование методов в промисы
const fs = require('fs').promises;

async function addTimestamp() {
 try {
 const data = await fs.readFile('info.txt', 'utf8');
 const lines = data.split('\n');
 const timestampedLines = lines.map(line => `${line} - ${new Date().toLocaleString()}`);
 const outputData = timestampedLines.join('\n');
 await fs.writeFile('info_with_timestamp.txt', outputData, 'utf8');
 console.log('Данные успешно записаны в файл info_with_timestamp.txt');
 } catch (err) {
 console.error('Ошибка:', err);
 }
}

addTimestamp();
// Данные успешно записаны в файл info_with_timestamp.txt

Объяснение: Мы прочитали содержимое файла info.txt, добавили к каждому строковому значению текущую дату и время, и записали результат в файл info_with_timestamp.txt с использованием async/await.

Категория: JavaScript | Просмотров: 76 | Добавил: Admin | Рейтинг: 1.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: