На этом шаге мы рассмотрим способы чтения данных из файла .
Текстовые файлы создаются, чтобы хранить в них данные, и существуют, чтобы содержащиеся в них данные можно было прочесть. Чтение и запись данных производится с помощью следующих трех этапов:
- открытие файла;
- чтение или запись данных;
- закрытие файла.
Открытие текстового файла производится с помощью метода OpenTextFile() объекта FSO либо с помощью метода OpenAsTextStream объекта файла. При этом файл может быть открыт в трех режимах:
- 1 — только для чтения ( for reading only ),
- 2 — для записи ( for writing ) и
- 8 — для добавления ( for appending ) данных.
Режимы для записи и добавления данных не допускают чтения. В режиме добавления записываемые данные добавляются к уже существующим. В режиме записи старые данные теряются, а новые записываются, поэтому режим записи лучше называть режимом перезаписи.
Открытие файла можно осуществить следующими способами:
Здесь filepath — имя файла, возможно, с указанием пути к нему (например, «С:\ Мои документы \testfile.txt» ); mode — режим открытия файла (1, 2 или 8).
В результате создания нового текстового файла он остается открытым. Чтобы он был сразу же доступен для записи, необходимо передать методу CreateTextFile() второй параметр со значением true :
Для чтения данных из открытого текстового файла используются следующие методы объекта файла:
- Read( количество байтов >) — применяется для чтения заданного количества байтов (символов);
- ReadLine() — применяется для чтения строки, при этом исключается символ перехода на новую строку;
- ReadAll() — применяется для чтения всего содержимого текстового файла.
Если вы используете методы Read( количество байтов >) или ReadLine() и хотите пропустить заданное количество байтов или строку, то можете использовать методы Skip( количество байтов >) и SkipLine() соответственно. Эти методы перемещения по файлу изменяют положение так называемого указателя, которое характеризуется значениями свойств Column( позиция в строке >) и Line( номер строки >) объекта файла. При первоначальном открытии файла эти свойства, доступные только для чтения, имеют значения 1. Каждое применение методов ReadLine() и SkipLine() увеличивает значение свойства Line на 1.
Метод ReadAll() после методов перемещения даст в результате содержимое файла, начиная с текущего положения указателя и до конца файла.
В заключение приведем пример, в котором осуществляется чтение содержимого текстового файла pr.dat , расположенного на диске C: . После загрузки документа сожержимое этого файла отображается в многострочной текстовой области.
Рис.1. Документ после загрузки в браузер
Затем указывается количество байтов, которое нужно пропустить и по нажатию кнопки выводится новая строка и столбец, где находится указатель файла.
Рис.2. Вывод новых строки и столбца
После этого в многострочной текстовой области выводится содержимое файла, начиная с текущей позиции указателя.
Рис.3. Вывод файла без учета пропущенных байтов
Обратите внимание на то, что каждый раз приходится переоткрывать файл, чтобы переместить указатель в начало файла.
Приведем полный текст документа.
На следующем шаге мы рассмотрим запись в файл .
Для работы с файлами в Node.js предназначен модуль fs. Рассмотрим, как с ним работать.
Чтение из файла
Допустим, в одной папке с файлом приложения app.js расположен текстовый файл hello.txt с простейшим текстом, например:
Для чтения файла в синхронном варианте применяется функция fs.readFileSync() :
В метод передается путь к файлу относительно файла приложения app.js, а в качестве второго параметра указывается кодировка для получения текстового содержимого файла. На выходе получаем считанный текст.
Для асинхронного чтения файла применяется функция fs.readFile :
Первый и второй параметр функции опять же соответственно путь к файлу и кодировка. А в качестве третьего параметра передается функция обратного вызова, которая выполняется после завершения чтения. Первый параметр этой функции хранит информацию об ошибке при наличии, а второй — собственно считанные данные.
Для чтения файла определим в файле app.js следующий код:

И здесь стоит обратить внимание, что несмотря на то, что функция fs.readFile() вызывается первой, но так как она асинхронная, она не блокирует поток выполнения, поэтому ее результат выводится в самом конце.
Запись файла
Для записи файла в синхронном варианте используется функция fs.writeFileSync() , которая в качестве параметра принимает путь к файлу и записываемые данные:
Также для записи файла можно использовать асинхронную функцию fs.writeFile() , которая принимает те же параметры:
В качестве вспомогательного параметра в функцию может передаваться функция обратного вызова, которая выполняется после завершения записи:
Сегодня мы поговорим о том, как работать с файловой системой средствами Node.js, рассмотрим базовые операции, выполняемые с файлами. К таким операциям относятся следующие:
- Создание файла
- Чтение файла
- Запись данных в файл
- Удаление файла
- Переименование файла
Необходимость в выполнении подобных операций возникает в самых разных ситуациях.
Модуль fs
В Node.js имеется стандартный модуль, fs (сокращение от File System), дающий разработчику средства для работы с файловой системой. Импортировать его в проект можно так:
Методы этого модуля представлены в синхронной и асинхронной формах. Функции обратного вызова, передаваемые асинхронным методам, принимают в качестве первого параметра объект ошибки, а в качестве второго — данные, возвращённые при успешном выполнении операции. Рассмотрим пример:
Метод .readFile() , о котором мы ещё поговорим, предназначен для чтения файлов. В этом примере у функции обратного вызова есть два параметра — err и data . В первый параметр попадают ошибки, которые могут возникнуть при попытке чтения файла, во втором оказываются данные, полученные после успешного выполнения операции. Обратите внимание на то, что .readFile() — это асинхронный метод модуля fs . Его синхронная версия называется .readFileSync() . Похожий подход используется и для именования других методов модуля.
Создание нового файла
Начнём с примера:
Здесь метод fs.open() используется для создания нового файла. В качестве первого аргумента он принимает имя файла. Его второй аргумент представляет собой флаг, указывающий системе на то, что именно мы хотим сделать с файлом. В данном случае это флаг w (сокращение от writing), который указывает на то, что мы хотим открыть файл для записи. Метод .open() может принимать различные флаги. Вот некоторые из них:
- r : открыть файл для чтения
- r+ : открыть файл для чтения и записи
- rs : открыть файл для чтения в синхронном режиме
- w : открыть файл для записи
- a : открыть файл для записи данных в конец файла
- a+ : открыть файл для чтения и для записи данных в конец файла
Теперь, прежде чем переходить к следующему примеру, отредактируем только что созданный файл testFile.txt с помощью какого-нибудь текстового редактора. Внесём в него следующий текст:
Запись данных в файл
Поговорим о том, как дописать что-нибудь в файл:
Здесь мы используем метод .appendFile() для добавления данных в конец существующего файла. В качестве первого аргумента этот метод принимает имя файла, в качестве второго — данные, которые нужно добавить в конец файла. Третий аргумент — это, как обычно, функция обратного вызова.
После того, как код, показанный выше, успешно отработает, содержимое файла будет выглядеть так:
Существует и другой способ записи данных в файл. Он подразумевает использование метода .writeFile() . Этот метод очень похож на .appendFile() , но у него есть одно важное отличие. Дело в том, что с помощью метода .appendFile() мы добавляем в файл новые данные после тех данных, которые в нём уже есть. А при использовании метода .writeFile() содержимое файла заменяется на новое. Испытаем этот метод:
После успешного выполнения операции в файле окажется следующий текст:
Как видно, содержимое файла полностью заменено новым.
Чтение файла
Для чтения файлов модуль fs предоставляет метод .readFile() , пример использования которого мы уже видели. В качестве первого параметра он принимает имя файла, в качестве второго — кодировку. Третий параметр — функция обратного вызова. Попытаемся вывести в консоль содержимое файла testFile.txt с помощью этого метода:
Вот что у нас получится.

Данные файла, выведенные в консоль
Теперь поговорим о переименовании файлов.
Переименование файла
Для переименования файлов используется метод .rename() :
Первый аргумент метода представляет собой имя существующего файла, второй — новое имя этого файла. После успешного вызова этого метода файл testFile.txt превращается в newTestFile.txt .
Удаление файла
Для удаления файлов используется метод .unlink() :