Модули Node.js. Работа с файлами — запись, чтение, загрузка.

0
8140
  1. Изучаем Node.js. Установка Node.js и NPM + первая программа.
  2. Модули Node.js. Работа с файлами — запись, чтение, загрузка (текущий урок).

Продолжая серию уроков по изучению node.js, хотелось бы отдельно разобрать работу с файлами. Для этого мы выполним пару задач и подробно их разберем. Поскольку теперь мы будем писать программы посложнее Hello World, нам необходимо знать, что такое модули и как они работают в Node.js. Давайте разберемся с понятием модуль и зачем он нужен.

В Node.js все библиотеки (модули) разделены на отдельные файлы, для того, чтобы подгружать только необходимые. Модуль это программная единица, которая расширяет возможности Node.js. Скоро мы будем использовать модуль для работы с файловой системой — FS. Данный модуль представляет из себя набор методов для работы с файловой системой и для того, чтобы их использовать, необходимо модуль подключить. В Node.js для подключения модулей используется ключевое слово require('имя_модуля'), в случае с модулем fs, для его подключения надо написать так:

Теперь через fs мы можем получить доступ к любому методу модуля. Сам node.js изначально поставляется с рядом модулей, которые являются его составляющими.

Теперь давайте определимся с задачей. Нам необходимо создать программу, которая будет принимать аргумент с именем файла в глобальный объект process.argv (помните прошлый урок?), затем, программа создает файл в своей директории и записывает в него свое название. Приступим к реализации.

Модуль FS в Node.js. Создание, чтение, открытие файла.

Создайте файл в вашей папке с проектом, я назову файл program.js .

В первую очередь, нам необходимо подключить модуль для работы с файлами:

Так как мы планируем получать имя файла через переданный в консоли аргумент, нам необходимо где-то хранить это имя. Создадим переменную fname, которая будет получать первый переданный аргумент из консоли:

Как вы должны помнить, первые два значения в массиве argv заняты, поэтому переданные параметры начинаются с второго индекса. Для того, чтобы открыть файл воспользуемся методом модуля FS — open:

Первым параметром мы передаем имя файла, который мы получаем, второй аргумент это флаг режима доступа, w+ означает запись и чтение, указатель в начале файла. Существуют следующие флаги режимов доступа:

  • r — только чтение, указатель в начале файла
  • r+ — чтение и запись, указатель в начале файла
  • w — только запись, указатель в начале файла
  • w+ — запись и чтение, указатель в начале файла
  • a — запись, указатель в конце файла
  • a+ — запись и чтение, указатель в конце файла

Третий аргумент — режим доступа используется в случае, когда запрашиваем файл не существует. В этом случае будет создан новый пустой файл с заданным режимом. Стандартная для UNIX нотация — 0664

Последним аргументом функция принимает обработчик — функцию, которая будет выполнена при открытии или создании файла. Её аргументы — флаг ошибки и дескриптор файла.

С помощью аргументов, можем выловить ошибки и сразу проверить:

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

Для записи мы использовали функцию fs.write(), которая принимает схожие параметры, вторым аргументом мы передали имя текущего файла, которое должны записать.

Запустите программу! Посмотрим результат:

Работа с файлами в Node.js

 

Задача 2.

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

Написать программу, которая в качестве консоль-аргумента будет принимать имя файла и затем, определить количество переносов строк в файле (\n), а также вывести содержимое файла на экран.

Решаем. Делаем программу, примерно по тому же принципу что и первую. Воспользуемся функцией readFile() и затем, с помощью метода split() определим количество переносов в строке:

Результат:

Работа с файлами в Node.js

Работа с директориями в Node.js

Чтобы понять как взаимодействовать с файлами и директориями, попробуем решить следующую задачу:

Необходимо создать программу, которая отобразит список отфильтрованных по расширению файлов в заданной директории. Имя директории (‘/path/to/dir/’) будет передано в качестве первого аргумента к программе, а расширение файла для фильтрации во втором аргументе.

Например, если Вы получили ‘txt’ в качестве второго аргумента, то Вы должны вывести только те файлы, которые оканчиваются на .txt в заданной директории. Помните о том, что второй аргумент не будет иметь ‘.’ в начале.

Список файлов должен быть выведен в консоль построчно (каждый файл на новой строке). Так же необходимо использовать асинхронный I/O.

Решение данной задачи будет выглядеть следующим образом:

Функция fs.readdir() принимает путь к директории в качестве первого аргумента и функцию обратного вызова в качестве второго.

Не забывайте, что полноценная документация по методам модуля FS находится на официальном сайте — ссылка на документацию по FS.

Заключение

Работа с файловой системой методами модуля FS позволяет быстро получать доступ к файлам и директориям, а также управлять их содержимым и контролировать его. Теперь, когда мы разобрались как работает модуль FS вы можете попрактиковаться в написании собственных скриптов на базе данной библиотеки. Модуль имеет огромное количество методов, как асинхронных (основа работы node.js), так и синхронных. Функции, которые оканчиваются на Sync являются синхронными (блокирующими), поэтому доступ к файлу будет перекрыт до тех пор, пока операция не завершится.

Любые вопросы, связанные с данным уроком ждем в комментариях под записью или в группе вконтакте. Спасибо за внимание.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста оставьте комментарий!
Введите ваше имя