Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Чтение и запись файлов

В браузере у JavaScript нет доступа к диску, а в Node.js есть. За работу с файлами отвечает встроенный модуль node:fs (fs — file system, файловая система). Его версия node:fs/promises возвращает промисы, поэтому результат получают через await — так, как вы привыкли в учебнике.

Запись файла

Функция writeFile() создаёт файл или полностью перезаписывает существующий:

import { writeFile } from 'node:fs/promises';
 
await writeFile('hello.txt', 'Первая статья блога\n');
 
console.log('Файл записан');

После запуска рядом появится файл hello.txt с одной строкой. await можно писать прямо в модуле, без async-функции.

Чтение файла

Функция readFile() возвращает содержимое. Второй аргумент — кодировка: без него вернутся байты (объект Buffer), а не текст:

import { readFile, writeFile } from 'node:fs/promises';
 
await writeFile('hello.txt', 'Привет, файл!');
const text = await readFile('hello.txt', 'utf8');
 
console.log(text); // Привет, файл!

Пример сначала создаёт файл, а затем читает его. Кодировку utf8 указывайте всегда, когда читаете текст.

Дозапись в конец

appendFile() добавляет текст в конец файла, не стирая прежний. Так удобно вести журнал событий:

import { appendFile, readFile, writeFile } from 'node:fs/promises';
 
await writeFile('blog.log', 'Сервер запущен\n');
await appendFile('blog.log', 'Добавлена статья 1\n');
await appendFile('blog.log', 'Добавлена статья 2\n');
 
console.log(await readFile('blog.log', 'utf8'));

Выведутся три строки по порядку. Если файла нет, appendFile() создаст его.

Проверка, есть ли файл

Сведения о файле возвращает stat(): размер, дату изменения, файл это или папка:

import { stat, writeFile } from 'node:fs/promises';
 
await writeFile('hello.txt', 'Привет');
const info = await stat('hello.txt');
 
console.log(info.isFile()); // true
console.log(info.size);     // 12

Размер считается в байтах: каждая русская буква в кодировке UTF-8 занимает два байта.

Основные функции

ФункцияЧто делает
readFile(file, 'utf8')Читает файл целиком
writeFile(file, text)Создаёт или перезаписывает файл
appendFile(file, text)Дописывает в конец
stat(file)Сведения о файле
rename(from, to)Переименовывает или переносит
unlink(file)Удаляет файл

Частая ошибка

Чтение несуществующего файла бросает ошибку с кодом ENOENT (нет такого файла или папки). Если файла может не быть, перехватите её:

import { readFile } from 'node:fs/promises';
 
try {
  await readFile('missing.txt', 'utf8');
} catch (error) {
  console.log(error.code); // ENOENT
}

И не забывайте await: без него вместо текста вы получите промис Promise { <pending> }.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.