Хабрахабр

[Перевод] Node.js для начинающих: основы работы с файлами

Сегодня мы поговорим о том, как работать с файловой системой средствами Node.js, рассмотрим базовые операции, выполняемые с файлами. К таким операциям относятся следующие:

  • Создание файла
  • Чтение файла
  • Запись данных в файл
  • Удаление файла
  • Переименование файла

Необходимость в выполнении подобных операций возникает в самых разных ситуациях.

Модуль fs

В Node.js имеется стандартный модуль, fs (сокращение от File System), дающий разработчику средства для работы с файловой системой. Импортировать его в проект можно так:

var fs = require(‘fs’);

Методы этого модуля представлены в синхронной и асинхронной формах. Функции обратного вызова, передаваемые асинхронным методам, принимают в качестве первого параметра объект ошибки, а в качестве второго — данные, возвращённые при успешном выполнении операции. Рассмотрим пример:

function fileHandler()); }

Метод .readFile(), о котором мы ещё поговорим, предназначен для чтения файлов. В этом примере у функции обратного вызова есть два параметра — err и data. В первый параметр попадают ошибки, которые могут возникнуть при попытке чтения файла, во втором оказываются данные, полученные после успешного выполнения операции. Обратите внимание на то, что .readFile() — это асинхронный метод модуля fs. Его синхронная версия называется .readFileSync(). Похожий подход используется и для именования других методов модуля.

Создание нового файла

Начнём с примера:

function fileHandler(){ fs.open('testFile.txt', 'w', (err) => { if(err) throw err; console.log('File created'); }); }

Здесь метод fs.open() используется для создания нового файла. В качестве первого аргумента он принимает имя файла. Его второй аргумент представляет собой флаг, указывающий системе на то, что именно мы хотим сделать с файлом. В данном случае это флаг w (сокращение от writing), который указывает на то, что мы хотим открыть файл для записи. Метод .open() может принимать различные флаги. Вот некоторые из них:

  1. r: открыть файл для чтения
  2. r+: открыть файл для чтения и записи
  3. rs: открыть файл для чтения в синхронном режиме
  4. w: открыть файл для записи
  5. a: открыть файл для записи данных в конец файла
  6. a+: открыть файл для чтения и для записи данных в конец файла

Теперь, прежде чем переходить к следующему примеру, отредактируем только что созданный файл testFile.txt с помощью какого-нибудь текстового редактора. Внесём в него следующий текст:

This is a test file.
We're learning about Node.js File System.
The End.

Запись данных в файл

Поговорим о том, как дописать что-нибудь в файл:

function fileHandler(){ fs.appendFile('testFile.txt', ' This line is beyond the end.', (err) => { if(err) throw err; console.log('Data has been added!'); }); }

Здесь мы используем метод .appendFile() для добавления данных в конец существующего файла. В качестве первого аргумента этот метод принимает имя файла, в качестве второго — данные, которые нужно добавить в конец файла. Третий аргумент — это, как обычно, функция обратного вызова.

После того, как код, показанный выше, успешно отработает, содержимое файла будет выглядеть так:

This is a test file.
We're learning about Node.js File System.
The End. This line is beyond the end.

Существует и другой способ записи данных в файл. Он подразумевает использование метода .writeFile(). Этот метод очень похож на .appendFile(), но у него есть одно важное отличие. Дело в том, что с помощью метода .appendFile() мы добавляем в файл новые данные после тех данных, которые в нём уже есть. А при использовании метода .writeFile() содержимое файла заменяется на новое. Испытаем этот метод:

function fileHandler(){ fs.writeFile('testFile.txt', "I'm the replacement you've been looking for.", (err) => { if(err) throw err; console.log('Data has been replaced!'); }); }

После успешного выполнения операции в файле окажется следующий текст:

I'm the replacement you've been looking for.

Как видно, содержимое файла полностью заменено новым.

Чтение файла

Для чтения файлов модуль fs предоставляет метод .readFile(), пример использования которого мы уже видели. В качестве первого параметра он принимает имя файла, в качестве второго — кодировку. Третий параметр — функция обратного вызова. Попытаемся вывести в консоль содержимое файла testFile.txt с помощью этого метода:

function fileHandler(){ fs.readFile('testFile.txt', 'utf8', (err, data) => { if(err) throw err; console.log('--------- [File Data] ---------'); console.log(data); console.log('--------- [File Data] ---------'); }); }

Вот что у нас получится.

Данные файла, выведенные в консоль

Теперь поговорим о переименовании файлов.

Переименование файла

Для переименования файлов используется метод .rename():

function fileHandler(){ fs.rename('testFile.txt', 'newTestFile.txt', (err) => { if(err) throw err; console.log('File renamed successfully!'); }); }

Первый аргумент метода представляет собой имя существующего файла, второй — новое имя этого файла. После успешного вызова этого метода файл testFile.txt превращается в newTestFile.txt.

Удаление файла

Для удаления файлов используется метод .unlink():

function fileHandler(){ fs.unlink('newTestFile.txt', (err) => { if(err) throw err; console.log('File deleted successfully!'); }); }

Успешный вызов этого метода приводит к удалению файла newTestFile.txt.

Итоги

В этом материале мы рассмотрели основы работы с файловой системой в среде Node.js. Если вы хотите более глубоко освоить эту тему — взгляните на этот материал из цикла публикаций по Node.js, почитайте документацию по модулю fs и постарайтесь испробовать на практике всё, о чём узнаете.

Уважаемые читатели! Используете ли вы для работы с файлами в Node.js стандартный модуль fs или что-то другое?

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть