Node js прочитать файл xml

Обновлено: 07.07.2024

Для работы с файлами в Node.js используется встроенный модуль fs , который выполняет все синхронные и асинхронные операции ввода/вывода применительно к файлам. Чтение и запись файла могут осуществляться одним из двумя способов:

  • с использованием Buffer ;
  • через создание соответствующего потока.

Чтение файлов и директорий¶

Для чтения файла в асинхронном режиме используется метод Node.js readFile() , который принимает три параметра:

  • путь к файлу;
  • кодировка;
  • callback-функция, вызываемая после получения содержимого файла.

Callback-функции передается два аргумента: ошибка и полученные данные в строковом формате. Если операция прошла успешна, то в качестве ошибки передается null .

Если в readFile() не указать кодировку, то данные файла будут возвращены в формате Buffer .

Поскольку метод выполняется асинхронно, то не происходит блокировки главного процесса Node.js. Но в некоторых случаях может понадобиться синхронное чтение файла, для этого есть метод readFileSync() , но при этом выполнение главного процесса будет заблокировано до тех пор, пока полностью не будет загружено содержимое файла.

Node.js readFileSync() возвращает результат чтения файла и принимает два параметра:

Обработка и перехват ошибок при использовании readFileSync() осуществляется с помощью конструкции try<. >catch() <. >.

Чтобы инициировать ошибку, укажите неправильный путь к файлу.

Методы readFile() и readFileSync() для работы с файлами используют Buffer . Но есть и другой способ считать содержимое файла: создать поток с помощью Node.js fs.createReadStream() . Любой поток в Node.js является экземпляром класса EventEmitter , который позволяет обрабатывать возникающие в потоке события.

Параметры, принимаемые fs.createReadStream() :

  • путь к файлу;
  • объект со следующими настройками:
  • encoding - кодировка (по умолчанию utf8 );
  • mode - режим доступа (по умолчанию 0o666 );
  • autoClose - если true , то при событиях error и finish поток закроется автоматически (по умолчанию true ).

Вместо объекта настроек можно передать строку, которая будет задавать кодировку.

Использование потока имеет ряд преимуществ перед Buffer :

Для чтения директорий используются методы readdir() и readdirSync() , для асинхронного и синхронного режимов соответственно.

Node.js readdir() работает асинхронно и принимает три аргумента:

  • путь к директории;
  • кодировку;
  • callback-функцию, которая принимает аргументами ошибку и массив файлов директории (при успешном выполнении операции ошибка передается как null ).

Node.js readdirSync() работает синхронно, возвращает массив найденных файлов и принимает два параметра:

Создание и запись файлов и директорий¶

В Node.js файлы могут быть записаны также синхронно и асинхронно. Для асинхронной записи имеется метод writeFile() , принимающий следующие аргументы:

  • путь к файлу;
  • данные для записи;
  • параметры записи:
  • кодировка (по умолчанию utf8 );
  • права доступа (по умолчанию 0o666 );
  • callback-функция, которая вызывается по завершению операции и единственным аргументом принимает ошибку (в случае успешной записи передается null ).

Если нет необходимости указывать параметры записи, то третьим параметром Node.js writeFile() можно сразу передать callback-функцию.

Для синхронной записи Node.js файла используйте writeFileSync() . Метод принимает все те же аргументы, что и writeFile() за исключением callback-функции. В качестве значения возвращает undefined .

Как и в случае с readFileSync() обработка ошибок происходит с помощью try<. >catch() <. >.

Методы writeFile() и writeFileSync() перезаписывают уже имеющуюся в файле информацию новыми данными. Если вам нужно внести новые данные без удаления старых, используйте методы appendFIle() и appendFileAsync() , которые имеют идентичные параметры.

Для записи файла через потока ввода имеется метод fs.createWriteStream() , который возвращает поток ввода и принимает два параметра:

  • путь к файлу;
  • объект со следующими настройками:
  • encoding - кодировка (по умолчанию utf8 );
  • mode - режим доступа (по умолчанию 0o666 );
  • autoClose - если true , то при событиях error и finish поток закроется автоматически (по умолчанию true ).

Чтобы создать директорию, используйте методы mkdir() и mkdirSync() .

Node.js mkdir() работает асинхронно и принимает в качестве параметров:

  • путь к директории;
  • объект со следующими настройками:
  • recursive - если true , создает директорию и все ее родительские директории согласно указанному пути, если они еще не существуют (по умолчанию false , т. е. все родительские директории уже должны быть созданы, иначе будет сгенерирована ошибка);
  • mode - режим доступа, параметр не поддерживается на ОС Windows (по умолчанию 0o777 );
  • callback-функцию, которая единственным аргументом принимает ошибку, при успешном создании директории передается null .

Вторым параметром можно сразу передать callback-функцию.

Node.js mkdirSync() создает директорию синхронно и возвращает undefined . Обработка ошибок осуществляется через try<. >catch() <. >. Метод mkdirSync() принимает те же параметры, что и mkdir() , за исключением callback-функции.

Удаление файлов и директорий¶

Чтобы удалить в Node.js файлы используйте методы unlink() и unlinkSync() .

Метод unlink() асинхронный и принимает имя файла, который нужно удалить, и callback-функцию с ошибкой в качестве параметра ( null , если удаление прошло успешно).

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

Для удаления директорий имеются методы rmdir() и rmdirSync() соответственно. Они полностью идентичны unlink() и unlinkSync() , только вместо имени файла принимают имя директории.

Для чтения файла NodeJS необходимо использовать модуль под названием "fs". Приведём пример кода для считывания файла под названием "file.txt" и вывода его содержимого в консоль: Первым аргументом метода "readFileSync" передаётся абсолютный или относительный адрес файла, который необходимо считать. Второй параметр - это кодировка файла для считывания.

Наличие "Sync" в названии метода "readFileSync" означает, что используется синхронный метод чтения файла. То есть файл блокируется на время операции для всех пользователей. Мы использовали именно этот метод сейчас, потому что его легче реализовать (меньше кода)

В отличии от PHP, в котором запросы от пользователей обрабатываются параллельно, в NodeJS выполняется только одна копия кода. К примеру, если установить бесконечный цикл вывода данных (например, в групповом чате), то первый пользователь, который запустит скрипт увидит цикл с самого начала, а остальные только с времени своего входа (запроса к скрипту). Из-за наличия синхронности "Sync" код из примера выше будет выполняться для всех пользователей одновременно. Попробуем переписать его, чтобы сделать параллельное выполнение. Получится так: В этом примере чтение файла выполняется асинхронно! То есть если файл достаточно большой, то при выполнения кода примера сначала мы увидим в консоли строку "Тише, мыши, кот на крыше", а только потом содержимое файла. Обратите внимание на третий параметр функции "fs.readFile". В NodeJS часто используются callback функции, у которых в первом параметре указывается название переменно, куда попадает ошибка выполнения.

Запись файла

Для асинхронной записи данных в файл существует метод "writeFile" модуля "fs". При этом файл будет принудительно создан при отсутствии, либо вся информация будет удалена из него, если она есть. Первым параметром этой функции передаётся название файла, вторым данные для записи. При этом в третьем параметре необходимо передать callback функцию с единственным параметром - переменной, в которую запишется ошибка. Продемонстрируем простейший пример записи в файл: Обратите внимание, что во второй строчке этого примера callback функцию можно записать, опусти слово "function" и даже скобки вокруг (error). Но тогда надо поставить знак => (получится "стрелочная" функция). Чтобы получилось так: Если параметр только один, то круглые скобки и вовсе можно убрать (и нельзя если параметров несколько): Но обычно круглые скобки оставляют, чтобы было нагляднее, что это функция.

Если в первом параметре "writeFile" указать несуществующий путь (папку, которой нет), то будет возвращена ошибка. Потому что "writeFile" умеет создавать только файлы, но не папки.

У меня есть такой файл XML, который хранит информацию о конфигурации:

clipboard1

Прочитайте код JavaScript для этого файла конфигурации, используйте модуль XML2JS в Nodejs:

Как потреблять этот GetFieldList?

Результаты теста могут работать должным образом:

clipboard2


Чтобы получить больше оригинальных статей Джерри, пожалуйста, обратите внимание на публичный счет "Ван Zi xi":

Интеллектуальная рекомендация


Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом для чтения.

Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом чтения Fabric Файл исходного кода одиночного режима находится в ord.


Мяу Пасс Матрица SDUT

Мяу Пасс Матрица SDUT Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description Лянцзян получил матрицу, но эта матрица была особенно уродливой, и Лянцзян испытал отвращение. Чт.


Гессенская легкая двоичная структура удаленного вызова

Hessian - это легкая двоичная структура удаленного вызова, официальный адрес документа, в основном он включает протокол удаленного вызова Hessian, протокол сериализации Hessian, прокси-сервер клиента .


TCP Pasket и распаковка и Нетти Solutions

Основные введение TCP является ориентированным на соединение, обеспечивая высокую надежность услуг. На обоих концах (клиенты и терминалы сервера) должны иметь один или более гнезда, так что передающий.

NodeJS. Запись и чтение файлов.

Всем привет! В этой статье мы рассмотрим, как записывать и читать файлы в NodeJS.

Платформа NodeJS позволяет записывать и читать файлы в операционной системе. Для этого нам потребуется использовать модуль FS(file system).

Для демонстрации считывания содержимого файлов давайте создадим файлик с названием readme.txt.

// содержимое файла readme.txt
Здесь какое-нибудь содержимое файла

Теперь давайте попробуем прочитать этот файл. Для этого нам потребуется написать следующее:

Мы используем метод, в который передаем первым параметром имя файла, а вторым – кодировку. Как понятно из названия, этот метод является синхронным. Это значит, что весь код, который идет ниже, выполнится только тогда, когда весь файл будет прочитан. Дальше мы просто записываем полученные данные в переменную, которую потом выводим на экран.

Теперь давайте попробуем считанное нами содержание файла записать в новый файл. Для этого напишем следующее:

Теперь после запуска кода вы увидите, что создался новый файлик с названием writeme.txt, в котором будет содержимое, записанное в переменную text из файла readme.txt.

Давайте рассмотрим, как использовать методы асинхронно. Например, считаем файлик readme.txt:

Использование почти такое же, но теперь мы также третьим параметром передаем функцию, где в качестве аргументов первым идет ошибка, а вторым содержимое файла, которое мы потом и выводим. Ниже я написал еще один вывод текста, чтобы показать вам, что метод действительно асинхронный, поэтому, пока идет считывание файла, выполнится код ниже, а только потом выведется текст из файлика.

Теперь давайте снова считаем содержимое файла readme.txt и запишем его в файл writeme.txt, но только теперь асинхронно.

А на этом у меня сегодня все. Спасибо за внимание!


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

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

Она выглядит вот так:

Комментарии ( 0 ):

Читайте также: