Js как писать в файл

Обновлено: 03.07.2024

В этом посте мы расскажем, как использовать модуль fs в Node.js для записи и изменения файлов с помощью writeFile() и writeFileSync() . Мы также рассмотрим альтернативную библиотеку, которую мы можем использовать, которая называется replace-in-file.

В этом сообщении предполагается, что у вас есть общие знания о синтаксисе JavaScript, но не требуется каких-либо специальных знаний Node.js.

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

Перезаписать файл с помощью Node.js Использование fs writeFile для записи в файлы (асинхронно)

Давайте сразу перейдем к делу на примере fs writeFile():

Это изменит содержимое файла, чтобы оно содержало строку «Hello world».

Функция обратного вызова будет выполнена после того, как файл будет успешно записан или произойдет ошибка.

Использование fs writeFileSync для записи в файлы (синхронно)

Если вам нужна синхронная версия, вы можете использовать writeFileSync :

Прочитайте из файла, затем измените его часть с помощью Node.js Использование fs readFileSync для чтения из файла (синхронно)

После того, как мы прочитаем файл, у нас будет копия содержимого файла. Затем мы можем использовать функцию замены JavaScript, чтобы изменить его перед обновлением файла с новым содержимым.

Использование fs readFile для чтения из файла (асинхронно)

Асинхронной версией readFileSync является readFile :

Здесь, когда мы успешно получим содержимое файла (или получим ошибку), будет вызвана функция обратного вызова. Затем мы можем использовать writeFile для изменения содержимого файла.

Как эффективно использовать функцию замены JavaScript

В приведенном выше примере вы заметите, что мы передавали строки в функцию замены JavaScript:

Это заменяет только первый экземпляр "Привет" на "До свидания". Если вы хотите заменить более одного экземпляра, вы можете использовать регулярное выражение:

Если вы заржавели в регулярном выражении (или не использовали его раньше):

  • Шаблоны регулярных выражений находятся внутри //
  • Буква "g" в конце означает, что он "глобальный", что означает, что будут найдены все вхождения.
  • /Hello/g найдет все вхождения строки «Hello»

Regex может делать гораздо больше интересных вещей, но я не буду углубляться в это в этом посте! При написании шаблонов регулярных выражений я рекомендую тестировать их с помощью такого инструмента, как RegExr.

Помимо строк и регулярных выражений, мы также можем передавать функции!

Это приведет к преобразованию всех экземпляров «Hello» в «H e ll o».

Использование замены в файле для записи в файлы

Вместо fs readFile и writeFile мы также можем использовать удобную библиотеку, которая называется replace-in-file.

Чтобы заменить все экземпляры "Здравствуйте" на "До свидания", выполните следующие действия:

Вы заметите, что нам больше не нужно открывать файл и получать его содержимое — функция replace-in-file сделает это за вас.

Переменные from и to принимают строки, шаблоны Regex и функции.

fs writeFile против замены в файле

Для простых случаев использования fs writeFile выполнит свою работу. У библиотеки замены в файле есть несколько дополнительных функций, которые делают ее весьма полезной.

В этой статье мы поговорим о том, как читать или записывать текст в файл с помощью JavaScript. Если вы разработчик JavaScript, вы знаете, что нельзя сохранить файл локально, так как это может создать серьезные проблемы с безопасностью.

JavaScript не имеет возможности доступа к файловой системе пользователя, поэтому мы должны запускать проект на сервере. Для этого мы будем использовать node.js, который поможет нам, поскольку мы можем использовать его встроенный модуль или библиотеку. Мы можем использовать это, чтобы предоставить пользователям ссылку для скачивания текстового файла

NodeJs предоставляет нам модуль или библиотеку, которая обрабатывает все, что связано с операциями записи в JavaScript. Он известен как «browserify-fs». Простыми словами можно сказать, что «browserify-fs» — это программа на JavaScript, где все функции написаны для операций записи.

Давайте установим browserify с помощью следующей команды:

После успешной установки импортируйте модуль browserify-fs в нужную программу. Теперь мы можем использовать различные функции для записи текстов или чтения текстов из файла.

Записать в файл

Давайте рассмотрим пример функции, которая создаст новый файл с указанным именем. Если файл с таким именем уже существует, все его данные будут стерты и перезаписаны.

Функция writeFile используется для записи операций в Node; как уже упоминалось, он принимает три разных параметра. Давайте рассмотрим их немного подробнее:

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

Данные: сюда помещаются данные, записанные в файл.

Функция обратного вызова: этот параметр очень полезен, так как, например, по какой-то причине операция не записала наши данные, тогда она сгенерирует ошибку и покажет нам ошибку. У него есть аргумент, в который мы можем передать строку ошибки или аргумент ошибки.

Демонстрация записи текста в файл::

Для записи текста в файл, во-первых, нам потребуется модуль «browserify-fs», который включает определение функции writeFile().

// Требуется browserify-fs, который включает функцию writefile()

const fs = require ('browserify-fs')

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

// простой текст для записи в файл

let data = "Здравствуйте и добро пожаловать на linuxhint.com"

Теперь откройте функцию writeFile, укажите ей имя файла вместе с данными, которые вы хотите сохранить в файле, и напишите функцию обратного вызова обработчика ошибок, как показано ниже:

// Запись данных в файл 'file.txt'

фс. writeFile('file.txt', данные, (ошибка) =>

// обработка ошибок с помощью throw

если (ошибка) бросить ошибку;

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

// Требуется browserify-fs, который включает функцию writefile()

const fs = require ('browserify-fs')

// простой текст для записи в файл

let data = "Здравствуйте и добро пожаловать на linuxhint.com"

// Запись данных в файл 'file.txt'

фс. writeFile('file.txt', данные, (ошибка) =>

// обработка ошибок с помощью throw

если (ошибка) бросить ошибку;

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

Читать файл

Теперь, когда мы записали в файл, давайте прочитаем из файла. Функция readFile() используется, когда мы хотим прочитать содержимое какого-либо файла.

Синтаксис:

Функция readFile() используется для операций чтения; он также принимает три параметра, как указано выше. Давайте рассмотрим их немного подробнее:

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

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

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

Демонстрация чтения текста из файла

Мы будем использовать недавно созданный файл файла «file.txt».

Для чтения текста из файла, во-первых, нам потребуется модуль «browserify-fs», который включает определение функции readFile().

// Требуется browserify-fs, который включает функцию readfile()

const fs = require ('browserify-fs')

Затем мы получим доступ к функции readFile(), предоставим ей имя файла, из которого вы хотите прочитать данные, и напишем функцию обратного вызова для обработки ошибок и отображения данных:

// Чтение данных из файла 'file.txt'

фс. readFile('file.txt', (ошибка, данные) =>

// обработка ошибок с помощью throw

если (ошибка) бросить ошибку;

// вывод извлеченных данных из файла на консоль

консоль. журнал (данные.toString()) ;

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

// Требуется browserify-fs, который включает функцию readfile()

const fs = require ('browserify-fs')

// Чтение данных из файла 'file.txt'

фс. readFile('file.txt', (ошибка, данные) =>

// обработка ошибок с помощью throw

если (ошибка) бросить ошибку;

// вывод извлеченных данных из файла на консоль

консоль. журнал (данные.toString()) ;

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


Вот как вы можете читать/записывать данные в файл с помощью модуля browserify-fs в javaScript.

Заключение

Запись или чтение файла на любом языке программирования является необходимостью, поскольку мы можем разрабатывать небольшие проекты, где нам не нужны большие базы данных. Затем мы используем файловые системы для чтения или записи данных в файл.В этой статье мы увидели, как читать или записывать текст в файл в JavaScript. Для решения нашей задачи мы использовали «browserify-fs».

В этом уроке я расскажу вам, как читать текстовый файл и писать в него с помощью JavaScript. Как мы знаем, JavaScript не имеет возможности доступа к файловой системе пользователя, поэтому для этого нам нужно запустить проект на сервере. Для этого мы используем node.js.

В node.js это одна библиотека fs (файловая система), которая используется для управления всеми операциями чтения и записи. Используя модуль fs, мы можем читать и записывать файлы как синхронно, так и асинхронно.

Существует множество способов чтения и записи данных в файл. Давайте рассмотрим каждый из них один за другим.

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

Способ 1. Использование Node.js

Во-первых, с помощью методов writefile и readFile в среде node.js.

записать файл:

Это используется для записи содержимого в файл. Его синтаксис ниже:

У него три параметра: путь, данные, обратный вызов.

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

Данные: во-вторых, это данные. В этом параметре нам нужно передать информацию, необходимую для записи в файл.

Обратный вызов: последний — это функция обратного вызова, в которой мы передаем строку ошибки. Если операции не удается записать данные, ошибка указывает на ошибку.

index.js

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

>узел index.js

чтение файла:

Используется для чтения содержимого файла. его синтаксис:

У него также есть три параметра: путь, обратный вызов, параметры.

путь — это расположение текстового файла. Если и файл, и программа находятся в одной папке, то сразу укажите имя файла текстового файла.

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

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

index.js

Чтобы запустить эту программу, введите следующую команду:

>узел index.js

Способ 2. Использование ActiveXObject

Другой метод заключается в использовании объектов ActiveX веб-страницы, но этот метод в основном работает только в Internet Explorer.

Этот ActiveXObject используется для возврата экземпляра библиотеки файловой системы, которая используется с методом CreateTextFile. Этот метод JS, который генерирует функции, определенные файлом, и устанавливает объект TextStream для чтения или записи в файл. Он также возвращает логическое значение, на основе которого мы можем узнать, можем ли мы перезаписать текущий файл или нет. Итак, если вы хотите добавить данные в созданный файл, вы можете использовать метод writeline, который используется для добавления текстовой строки в файл.

При использовании объектов ActiveX для чтения файла в код необходимо включить следующее:

Объект ActiveX содержит три элемента: имя библиотеки, имя класса и расположение. Итак, имя класса — это экземпляр класса, который необходимо создать. имя библиотеки является обязательным полем и является признаком приложения, передающего объект.

Internet Explorer позволяет выполнять запись в файловую систему Windows с помощью безобидной функции execCommand(). Он не полагается на потенциально небезопасную и часто поврежденную технологию ActiveX, которая необходима для локального чтения файлов или чего-либо еще. Ничто не будет сохранено без явного предварительного согласия, диалоговое окно, позволяющее выбрать папку, требует, чтобы пользователь каждый раз нажимал или набирал «ОК», и даже есть дополнительный запрос на подтверждение, если имя файла уже существует. Потому что, если это подтвердится, файл будет перезаписан.

Живой пример формы

Введите текст для сохранения и, при желании, имя. Затем нажмите кнопку «Сохранить», чтобы сохранить текст в локальный файл в вашей системе. Используйте функцию Unnull, если у вас есть текст в кодировке utf-16 с нулевыми байтами, который необходимо очистить.

Типы файлов

Для сохранения доступны текстовые файлы двух типов: .txt для обычного текста и .html для документов с форматированным текстом, т.е. содержащие некоторую разметку. Диалоговое окно «Сохранить как», доступное с помощью функции execCommand(), исходит из стандартной системной dll и не является тем же диалоговым окном, которое браузер использует при сохранении A. выбирается в меню Файлфайл. Только последний включает известную опцию одиночного файла .mht.

Файлы, сохраненные в формате .html, будут заключены в теги. Голова будет выглядеть так:

Нижний колонтитул такой:

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

Будет ясно, что управление очень ограничено, и более сложные варианты использования, например, с именами файлов, оканчивающимися на .css, исключены. Для записи в локальную файловую систему с абсолютной мощностью требуется ActiveXObject и 'Scripting.FileSystemObject' .

Скрипт

Сценарий вызывается при отправке формы:

С помощью этого метода можно сохранить только целые документы, поэтому текст необходимо скопировать в отдельное окно, фрейм или какой-либо подобный объект; этот скрипт использует скрытый элемент. Сценарий создает iframe, если он еще не существует, или открывает небольшое всплывающее окно, если его невозможно создать, записывает в него текст, а затем вызывает функцию execCommand() как метод вновь созданного документа.

Метод execCommand() принимает три аргумента. Первый — это идентификатор команды, строка, определяющая команду для выполнения. Второй параметр — это логическое значение, указывающее, следует ли отображать диалоговое окно. С командой «Сохранить как», которая всегда отображает диалоговое окно, это необязательно, в отличие от документации на веб-сайте производителя. Требуемый путь и имя создаваемого файла передаются в третьем параметре с символом обратной косой черты \ в качестве разделителя.

Если пользователь в какой-то момент отменил диалоговое окно "Сохранить", метод возвращает false . Если указанное место помечено как доступное только для чтения или по какой-то технической причине команда не выполнилась, ничего не сохранено и файл не был записан, возвращается то же самое false. В сценарии невозможно определить, какой из двух возвращается, кроме как запросом. Если по милости Божией файл будет сохранен, метод точно вернет true .

Последний вызов close() влияет на всплывающее окно, но не на iframe.

Нулевые байты

Нулевые байты, которые выглядят как дополнительные пробелы между символами с использованием кодировки Unicode UTF-16 по умолчанию, могут быть подавлены путем открытия файла как text/plain, а не text/html , независимо от расширения, и форсирования символа установите значение UTF-8, как показано выше в функции Javascript.

Если у вас есть что-то в буфере обмена, следующее быстрое регулярное выражение для удаления этого лишнего пробела:

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

Функция кнопки Unnull в форме на этой странице построена на этой теме:

Первые несколько символов в тексте, который был переведен из UTF-16 в UTF-8, всегда являются одной и той же тарабарщиной. Функция использует этот факт, проверяя их наличие с помощью регулярного выражения r перед выполнением преобразования.

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