Дополнительно
Запись файлов в Node.js
Я пытался найти способ записи в файл при использовании Node.js, но безуспешно. Как я могу это сделать?
1526
16
В [File System API] много деталей 1. Самый распространенный способ:
В настоящее время есть три способа написать файл:
fs.write (fd, буфер, смещение, длина, позиция, обратный вызов
)Вам нужно дождаться обратного вызова, чтобы убедиться, что буфер записан на диск. Это не буферизовано.
fs.writeFile (имя файла, данные, [кодирование], обратный вызов)
Все данные должны храниться одновременно; Вы не можете выполнять последовательные записи.
fs.createWriteStream (path, [options]
)Создает
WriteStream
, что удобно, потому что вам не нужно ждать обратного вызова. Но опять же, это не буферизовано.WriteStream
, как следует из названия, является потоком. Поток по определению - это «буфер», содержащий данные, которые движутся в одном направлении (источник ► назначения). Но поток для записи не обязательно «буферный». Поток «буферен», когда вы пишетеn
раз, а в момент времениn + 1
поток отправляет буфер в ядро (потому что он полон и должен быть промыт).Другими словами: «Буфер» - это объект. Является ли он «буферизованным», является свойством этого объекта.
Если вы посмотрите на код,
WriteStream
наследует от записываемого объектаStream
. Если вы обратите внимание, вы увидите, как они смывают контент; у них нет буферизационной системы.Если вы пишете строку, она преобразуется в буфер, а затем отправляется на родной слой и записывается на диск. При написании строк они не заполняют буфер. Итак, если вы делаете:
& Лт;!- язык-все: lang-js - >
Вы делаете:
Это три вызова уровня ввода / вывода. Хотя вы используете «буферы», данные не буферизуются. Буферный поток будет делать:
fs.write (новый буфер ("abc"))
, один вызов к слою ввода / вывода.На данный момент в Node.js v0.12 (стабированная версия объявлена 02/06/2015) теперь поддерживаются две функции:
cork ()
иuncork ()
. Похоже, что эти функции наконец позволят вам буферизовать / промывать вызовы записи.Например, в Java есть некоторые классы, которые предоставляют буферизованные потоки (
BufferedOutputStream
,BufferedWriter
...). Если вы напишите три байта, эти байты будут сохранены в буфере (памяти) вместо вызова ввода / вывода всего за три байта. Когда буфер заполнен, содержимое промывается и сохраняется на диск. Это улучшает производительность.Я ничего не открываю, просто вспоминаю, как должен быть сделан доступ к диску.
Вы можете, конечно, сделать его немного более продвинутым. Неблокировка, запись кусочков, не запись всего файла сразу:
Синхронная запись
Асинхронная запись
Где
Стоит прочитать официальную файловую систему (fs) docs.
Мне понравилось Индекс ./ article / file-system .
Это сработало для меня.
Смотрите также Как мне писать файлы в node.js? .
Содержание helloworld.txt:
Обновление: Как и в случае с узлом Linux, пишите в текущем каталоге, в некоторых других это не так, поэтому я добавляю этот комментарий на всякий случай: Используя это
ROOT_APP_PATH = fs.realpathSync ('.«); consol.log (ROOT_APP_PATH);
, чтобы получить, где файл написан.Я знаю вопрос, задаваемый о «записи», но в более общем смысле «приложение» может быть полезным в некоторых случаях, поскольку его легко использовать в цикле для добавления текста в файл (существует ли файл или нет). Используйте «\ n», если вы хотите добавить строки, например:
Предоставленные ответы датированы, и более новый способ сделать это:
см. документы здесь для получения дополнительной информации
Хорошо, это довольно просто, так как Node имеет встроенную функциональность для этого, он называется
fs
, что означает File System и, в основном, Модуль файловой системы NodeJS ...Поэтому сначала потребуйте его в вашем файле server.js , как это:
fs
имеет несколько способов записи в файл, но мой предпочтительный способ - использоватьappendFile
, это добавит материал в файл и, если файл не существует, создаст его, код может быть похож на приведенный ниже: ,Например: прочитайте файл и напишите в другой файл:
Вы можете записать в файл, используя модуль fs (файловая система).
Вот пример того, как вы можете это сделать
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Вы также можете избавиться от этой структуры кода обратного вызова внутри обратного вызова, используя операторы Promises и
async
/await
. Это сделает асинхронную структуру кода гораздо более плоской. Для этого можно использовать удобную функцию util.promisify (original). Это позволяет нам переключаться с обратных вызовов на обещания. Взгляните на пример с функциямиfs
ниже:& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Здесь мы используем w + для чтения / записи обоих действий, и если путь к файлу не найден, он будет создан автоматически.
Контент означает то, что вы должны написать в файл, и его длину, «content.length».
Вот пример того, как читать файл csv из локального и записывать файл csv в локальный.
Вы можете написать в файле следующим примером кода:
После прочтения этой длинной статьи. Вы должны понимать, как это работает. Итак, вот пример
createWriteStream ()
.Вы можете использовать библиотеку
easy-file-manager
установить сначала с npm
npm установить easy-file-manager
Образец для загрузки и удаления файлов