Написание файлов в Node.js

Я пытался найти способ записи в файл при использовании Node.js, но безуспешно. Как я могу это сделать?


В API файловой системы есть много деталей. Наиболее распространенный способ:

  const fs = require ('fs'); fs.writeFile ("/tmp/test", "Привет!", Function (err  ) {if (err) {return console.log (err);} console.log ("Файл был сохранен!");}); //Orfs.writeFileSync ('/tmp/test-sync', 'Привет!');  

553

В настоящее время существует три способа записи файла:

  1. fs.write (fd, buffer, offset, length, position, callback )

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

  2. fs.writeFile (имя файла, данные, [кодировка], обратный вызов)

    Все данные должны храниться одновременно; нельзя выполнять последовательные записи.

  3. fs.createWriteStream (path, [options] )

    Создает WriteStream , что удобно, поскольку вам не нужно ждать обратного вызова. Но опять же, он не буферизован.

WriteStream , как следует из названия, является потоком. Поток по определению — это «буфер», содержащий данные, которые движутся в одном направлении (источник ► место назначения). Но доступный для записи поток не обязательно «буферизуется». Поток «буферизуется», когда вы пишете n раз, а во время n + 1 поток отправляет буфер в ядро ​​(потому что он заполнен и необходимо очистить).

Другими словами: «буфер» — это объект. Является ли он «буферизированным» или нет — это свойство этого объекта.

Если вы посмотрите на код, WriteStream наследуется от записываемого Объект Stream . Если вы обратите внимание, вы увидите, как они сбрасывают контент; у них нет системы буферизации.

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

  write ("a") write ("b") write ("c")  

Вы делаете:

  fs.write (new Buffer ("a")) fs.write (new Buffer ("b")) fs.write (new Buffer  ("c"))  

Это три вызова уровня ввода-вывода. Хотя вы используете «буферы», данные не буферизуются. Буферизованный поток будет выполнять: fs.write (new Buffer ("abc")) , один вызов уровня ввода-вывода.

На данный момент, в Node.js v0.12 (стабильная версия объявлена ​​06.02.2015) теперь поддерживает две функции: cork () и uncork () . Кажется, что эти функции наконец позволят вам буферизовать/сбрасывать вызовы записи.

Например, в Java есть несколько классов, которые предоставляют буферизованные потоки ( BufferedOutputStream , BufferedWriter …). Если вы напишете три байта, эти байты будут сохранены в буфере (памяти) вместо того, чтобы выполнять вызов ввода-вывода только для трех байтов. Когда буфер заполнен, содержимое сбрасывается и сохраняется на диск. Это улучшает производительность.

Я ничего не обнаруживаю, просто помню, как должен осуществляться доступ к диску.

Улучшите этот ответ
отредактировано 22 декабря 2015 г. в 21:41
вики сообщества

21 оборот, 8 пользователей 88%
Габриэль Лламас
  • 5
    +1 — красивое объяснение . Для потока записи важно внимательно прочитать документацию. Если возвращается false или закрытие, важно вызвать writer.once (‘слив’, function () {}), иначе я пропустил строки, которые не были истощены, когда процесс закончился. — bryanmac 19 июня ’14 в 15:18
  • 4
    если вы могли бы предоставить пример использования cork () и uncork () для тех из нас, кто хочет попробовать из узла предварительной версии 0.11? — Professormeowingtons 16 авг., 14:05
  • На данный момент Node v0.12 стабильна. — авг 01 апр, в 17:41
  • Согласно анализу кода с GitHub, fs.writeFile кажется наиболее популярной из упомянутых вами функций. Вот реальные примеры использования fs.writeFile — drorw 18 апр 2019, 20:11
  • Существуют ли библиотеки производственного качества для npm , реализующие буферизованную запись? — nponeccop 12 мая ’19 в 18:48
добавить комментарий |

В настоящее время существует три способа записи файла:

  1. fs.write (fd, buffer, offset, length, position, callback )

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

  2. fs.writeFile (имя файла, данные, [кодировка], обратный вызов)

    Все данные должны храниться одновременно; нельзя выполнять последовательные записи.

  3. fs.createWriteStream (path, [options] )

    Создает WriteStream , что удобно, поскольку вам не нужно ждать обратного вызова. Но опять же, он не буферизован.

WriteStream , как следует из названия, является потоком. Поток по определению — это «буфер», содержащий данные, которые движутся в одном направлении (источник ► место назначения). Но доступный для записи поток не обязательно «буферизуется». Поток «буферизуется», когда вы пишете n раз, а во время n + 1 поток отправляет буфер в ядро ​​(потому что он заполнен и необходимо очистить).

Другими словами: «буфер» — это объект. Является ли он «буферизированным» или нет — это свойство этого объекта.

Если вы посмотрите на код, WriteStream наследуется от записываемого Объект Stream . Если вы обратите внимание, вы увидите, как они сбрасывают контент; у них нет системы буферизации.

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

  write ("a") write ("b") write ("c")  

Вы делаете:

  fs.write (new Buffer ("a")) fs.write (new Buffer ("b")) fs.write (new Buffer  ("c"))  

Это три вызова уровня ввода-вывода. Хотя вы используете «буферы», данные не буферизуются. Буферизованный поток будет выполнять: fs.write (new Buffer ("abc")) , один вызов уровня ввода-вывода.

На данный момент, в Node.js v0.12 (стабильная версия объявлена ​​06.02.2015) теперь поддерживает две функции: cork () и uncork () . Кажется, что эти функции, наконец, позволят вам буферизовать/сбрасывать вызовы записи.

Например, в Java есть несколько классов, которые предоставляют буферизованные потоки ( BufferedOutputStream , BufferedWriter …). Если вы напишете три байта, эти байты будут сохранены в буфере (памяти) вместо того, чтобы выполнять вызов ввода-вывода только для трех байтов. Когда буфер заполнен, содержимое сбрасывается и сохраняется на диск. Это улучшает производительность.

Я ничего не обнаруживаю, просто помню, как должен осуществляться доступ к диску.


280

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

  var fs = require ('fs'); var stream = fs.createWriteStream ("my_file  .txt "); stream.once ('open', function (fd) {stream.write (" Моя первая строка  n "); stream.write (" Моя вторая строка  n "); stream.end ();  });  

Улучшите этот ответ
отредактировано 31 августа 2015 г., в 17:58
Питер Мортенсен
27. 4k2121 золотой знак9393 серебряных знака123123 бронзовых знака
ответил 05 авг. >
  • 18
    Какая переменная ‘fd’ передана в обратный вызов для stream.once? — Скотт Теслер, 18 окт., В 17:49
  • 1
    @ScottDavidTesler файловый дескриптор, чтобы вы могли закрыть поток после того, как закончили с ним. — Алексей Каменский 20 нояб., В 11:32
  • 3
    Когда мне закрыть поток? Почему это не блокирует? Просто любопытно, я пытаюсь записать в файл журнала. — CloudMeta 03 янв., 13:06
  • 1
    Я не уверен, что когда поток сбрасывается. Я предполагаю, что есть возможность сбросить поток по запросу. — Фредрик Андерссон, 24 апр. ’13 в 9:38
  • 1
    @JoLiss Вам придется подождать. — Фредрик Андерссон 12 нояб., 2014, 15:37
| показать 4 дополнительных комментария

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

  var fs = require ('fs'); var stream = fs.createWriteStream ("my_file  .txt "); stream.once ('open', function (fd) {stream.write (" Моя первая строка  n "); stream.write (" Моя вторая строка  n "); stream.end ();  });  

71

Синхронная запись

fs.writeFileSync (file, data [, options])

   fs = require ('fs'); fs.writeFileSync ("foo.txt", "bar");  

Асинхронная запись

fs.writeFile (файл, данные [, параметры], обратный вызов)

  fs  = require ('fs'); fs.writeFile ('foo.txt', 'bar', (err) => {if (err) throw err;});  

Где

  file  |   |   |   имя файла или дескриптор файла  |   |  Параметры   |   callback  

Стоит прочитать официальную документацию по файловой системе (fs).

Обновление: async/await

  fs = require ('fs'); util = require ('util'); writeFile = util.promisify (fs.writeFile); fn = async  () => {await writeFile ('foo. txt ',' bar ');  } fn ()  

Улучшите этот ответ
отредактировано 04 авг. в 9:01
ответил 17 мая ’18 в 17:54
добавить комментарий |

Синхронная запись

fs.writeFileSync (файл, данные [, параметры])

  fs = require ('fs'); fs.writeFileSync ("foo.txt", "bar")  ;  

Асинхронная запись

fs.writeFile (file, data [, options] , обратный вызов)

  fs = require ('fs'); fs.writeFile ('foo.txt', 'bar', (err) => {  if (err) throw err;});  

Где

  file  |   |   |   имя файла или дескриптор файла  |   |  Параметры   |   callback  

Стоит прочитать официальную документацию по файловой системе (fs).

Обновление: async/await

  fs = require ('fs'); util = require ('util'); writeFile = util.promisify (fs.writeFile); fn = async  () => {ждать writeFile ('foo.txt', 'bar');  } fn ()  

55

  var path = 'public/uploads/file.txt', buffer = new Buffer ("some content  n"); fs.open (path, 'w', function (err, fd) {if  (err) {throw 'ошибка открытия файла:' + err;} fs.write (fd, buffer, 0, buffer.length, null, function (err) {if (err) throw 'error write file:' + err;  fs.close (fd, function () {console.log ('файл записан');})});});  

Улучшите этот ответ
отредактировано 24 апреля 2015 г. в 9:14
kix
3,1842424 серебряных знака3939 бронзовых знаков
ответил 16 декабря ’13 в 14:40
  • 2
    это демонстрирует, как записать файл, используя операции fs нижнего уровня. например, вы можете гарантировать, что файл закончил запись на диск и выпустил файловые дескрипторы. — Шон Гловер, 18 января 2015, 17:30
  • Поскольку в этом примере смещение, если установлено в ‘0’ (= третий параметр fs.write () ), этот пример работает только в том случае, если все достаточно короткое для записи за один звонок для записи. — Манфред, 9 фев. ’20 в 20:14
добавить комментарий |

  var path = 'public/uploads/file.txt', buffer = new Buffer ("некоторый контент  n  "); fs.open (path, 'w', function (err, fd) {if (err) {throw 'error open file:' + err;} fs.write (fd, buffer, 0, buffer.length,  null, function (err) {if (err) throw 'ошибка при записи файла:' + err; fs.close (fd, function () {console.log ('файл записан');})});});  

33

Мне понравилось Индекс ./articles/file-system.

У меня сработало.

См. также Как мне записывать файлы в node.js? .

  fs = require ('fs'); fs.writeFile ('helloworld.txt', 'Hello World!'  , function (err) {if (err) return console.log (err); console.log ('Записал Hello World в файл helloworld.txt, просто проверьте его');});  

Содержимое файла helloworld.txt:

  Hello World!  

Обновление:
Как в Linux нет de write в текущем каталоге, кажется, что в некоторых других нет, поэтому я добавляю этот комментарий на всякий случай:
Используя этот ROOT_APP_PATH = fs.realpathSync ('.'); console.log (ROOT_APP_PATH); , чтобы узнать, где записан файл.

Улучшите этот ответ
отредактировано 19 сентября ’17 в 16:11
ответил 7 ноя 2014 в 20:54
  • Где найти файл helloworld.txt? Ни в каких папках не могу найти … спасибо. — Кай Фенг Чу, 19 дек. ’14 в 06:58
  • в папке, в которой вы запускаете скрипт — Сержио, 19 декабря 2014 г., 17:22
  • Странно … Просто нигде не могу найти. Это будет скрыто? еще раз спасибо ~ — Кай Фэн Чу 19 дек. ’14 в 21:51
  • 6
    Я только что нашел. Используя этот ROOT_APP_PATH = fs.realpathSync (‘.’); console.log ( ROOT_APP_PATH ); получить мой где файл написан. благодаря. — Кай Фэн Чу, 22 дек. ’14, в 18:21
  • @ Сержио: нужно ли закрывать файл записи? Я вызываю другой процесс и получаю сообщение об ошибке, касающееся начала использования файла другим процессом. — Амир 19 дек. ’18 в 16:49
добавить комментарий |

Мне понравился Индекс ./articles/file-system .

У меня это сработало.

См. также Как мне писать файлы в node.js? .

  fs = require ('fs'); fs.writeFile ('helloworld.txt', 'Hello World!', function (err) {if (err) return console.log (err); console.log ('Wrote  Hello World в файле helloworld.txt, просто проверьте его ');});  

Содержимое helloworld.txt:

   Привет, мир!  

Обновление:
Как в узле Linux писать в текущем каталоге, в некоторых других, похоже, нет, поэтому я добавляю этот комментарий на всякий случай:
Использование этого ROOT_APP_PATH = fs.realpathSync ('.'); console.log (ROOT_APP_PATH); , чтобы узнать, где записан файл.


29

Предоставленные ответы датированы, и новый способ сделать это:

  const fsPromises = require ('fs').  promisesawait fsPromises.writeFile ('/path/to/file.txt', 'data to write')  

см. документы здесь для получения дополнительной информации

Улучшить этот ответ
отредактировал 18 июня ’19 в 10:36
bowman han
9631010 серебряных знаков2222 бронзовых знака
ответил 28 апр. ’19 в 18:42
  • 1
    (узел: 2375 9) ExperimentalWarning: API fs.promises является экспериментальным — jgraup, 29 апр. ’19, 18:49
  • @jgraup: вы используете последнюю версию узла? — TrevTheDev 30 апр. ’19 в 3:11
  • 9
    Функция включения должна быть асинхронной, иначе это не сработает. — Зимано, 29 августа ’19, 12:28
  • 1
    @Zimano Node уже поддерживает ожидание верхнего уровня, вам не нужна асинхронная оболочка. — wintercounter 26 апр. ’20 в 18:24
  • 1
    @wintercounter Как мило! — Зимано, 27 апр. ’20 в 9:39
| показать 3 дополнительных комментария

Приведенные ответы датированы, и новый способ сделать это:

  const fsPromises = require ('fs'). promisesawait fsPromises.writeFile ('/path/to/file.txt', 'data to write')  

см. документы здесь для получения дополнительной информации


23

Я знаю вопрос о «записи», но в более общем смысле «добавить» может быть полезно в некоторых случаях, поскольку его легко использовать в цикле для добавления текста в файл (является ли файл существует или нет). Используйте » n», если хотите добавить строки, например:

  var fs = require ('fs'); for (var i = 0; i  

Улучшите этот ответ
отредактировано 28 июля ’18 в 1:55
ответил 28 мая 2018 в 0:06
  • 1
    Поскольку теперь он доступен, я бы рекомендовал использовать const вместо var , т.е. const fs = require ('fs'); , чтобы избежать нежелательных побочных эффектов, в частности, если вы работаете с несколько большей базой кода. — Манфред, 09 фев. ’20 в 22:58
добавить комментарий |

Я знаю заданный вопрос о «записи», но в более общем смысле «добавить» может быть полезно в некоторых случаях, поскольку это легко для использования в цикле для добавления текста в файл (независимо от того, существует файл или нет). Используйте » n», если хотите добавить строки, например:

  var fs = require ('fs'); for (var i = 0; i  

14

Хорошо, это довольно просто, поскольку в Node есть встроенные функции для этого, он называется fs , который означает File System и, в основном, модуль файловой системы NodeJS

Поэтому сначала потребуйте его в своем сервер. js следующим образом:

  var fs = require ('fs');  

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

  fs.appendFile ('myFile.txt', 'Hi Ali!', function (err) {if (err) throw  err; console.log ('Спасибо, он сохранен в файле!');});  

Улучшите этот ответ
отредактировано 29 марта ’19 в 17:09
28 января ’19 в 05:40
  • 3
    одинарная кавычка в s tring следует избегать. — Тамер 28 мар. ’19 в 13:08
добавить комментарий |

Хорошо, это довольно просто, поскольку в Node есть встроенные функции для этого, он называется fs , который означает File System и, в основном, модуль файловой системы NodeJS

Поэтому сначала потребуйте его в своем server.js следующим образом:

  var fs = require ('fs');  

fs имеет несколько методов для записи в файл, но я предпочитаю использовать appendFile , это добавит материал в файл, и если файл не будет ‘ t существует, создаст его, код может выглядеть следующим образом:

  fs.appendFile ('myFile.txt', 'Hi Ali!', function (err) {if  (err) throw err; console.log ('Спасибо, он сохранен в файле!');});  

12

Вы можете писать в файл, используя модуль fs (файловая система).

Вот пример того, как ты u может это сделать:

  const fs = require ('fs'); const writeToFile = (fileName, callback) => {fs.open (fileName, 'wx',  (error, fileDescriptor) => {if (! error && fileDescriptor) {//Сделайте что-нибудь с файлом здесь ... fs.writeFile (fileDescriptor, newData, (error) => {if (! error) {fs. close (fileDescriptor, (error) => {if (! error) {callback (false);} else {callback ('Ошибка закрытия файла');}});  } else {callback ('Ошибка записи в новый файл');  }});  } else {callback ('Не удалось создать новый файл, возможно, он уже существует');  }});};  

Вы также можете избавиться от этой структуры кода обратного вызова-внутреннего-обратного вызова, используя Promises и async / await . Это сделает структуру асинхронного кода более плоской. Для этого можно использовать удобную функцию util.promisify (оригинальную). Это позволяет нам перейти от обратных вызовов к обещаниям. Взгляните на пример с функциями fs ниже:

 //Dependencies.const util = require ('util'); const fs  = require ('fs');//Обещаем функции "возврата к ошибке". const fsOpen = util.promisify (fs.open); const fsWrite = util.promisify (fs.writeFile); const fsClose = util.promisify (fs  .close);//Теперь мы можем создать функцию async с помощью await's.async function doSomethingWithFile (fileName) {const fileDescriptor = await fsOpen (fileName, 'wx'); //Что-нибудь делаем с файлом здесь ... await fsWrite (fileDescriptor, newData);  await fsClose (fileDescriptor);}  

Улучшить этот ответ
отредактировал 12 февраля ’20 в 18:51
ответил 20 сен 2018 в 10:36
  • 1
    Почему именно эти фрагменты, а не фрагменты кода? В любом случае они никогда не смогут работать в браузере. — Зимано, 29 августа ’19, 13:46
  • @Zimano Насколько я понимаю, вопрос касался nodejs, поэтому нет необходимости запускать его в браузере. — Манфред, 9 фев. ’20 в 23:01
  • 1
    @Manfred Совершенно верно! Я думаю, вы неправильно поняли то, что я пытался сказать; нет смысла иметь сниппеты, так как это nodejs! — Зимано, 11 фев. ’20 в 10:31
добавить комментарий |

Вы можете писать в файл, используя модуль fs (файловая система).

Вот пример как вы можете это сделать:

  const fs = require ('fs'); const writeToFile = (fileName, callback) => {fs.open (fileName, 'wx'  , (error, fileDescriptor) => {if (! error && fileDescriptor) {//Сделайте что-нибудь с файлом здесь ... fs.writeFile (fileDescriptor, newData, (error) => {if (! error) {fs. close (fileDescriptor, (error) => {if (! error) {callback (false);} else {callback ('Ошибка закрытия файла');}});  } else {callback ('Ошибка записи в новый файл');  }});  } else {callback ('Не удалось создать новый файл, возможно, он уже существует');  }});};  

Вы также можете избавиться от этой структуры кода обратного вызова-внутреннего-обратного вызова, используя Promises и async / await . Это сделает структуру асинхронного кода более плоской. Для этого можно использовать удобную функцию util.promisify (оригинальную). Это позволяет нам перейти от обратных вызовов к обещаниям. Взгляните на пример с функциями fs ниже:

 //Dependencies.const util = require ('util'); const fs  = require ('fs');//Обещаем функции "возврата к ошибке". const fsOpen = util.promisify (fs.open); const fsWrite = util.promisify (fs.writeFile); const fsClose = util.promisify (fs  .close);//Теперь мы можем создать функцию async с помощью await's.async function doSomethingWithFile (fileName) {const fileDescriptor = await fsOpen (fileName, 'wx'); //Что-нибудь делаем с файлом здесь ... await fsWrite (fileDescriptor, newData);  await fsClose (fileDescriptor);}  

11

  var fs = require ('fs');  fs.writeFile (путь + "\ message.txt", "Hello", function (err) {if (err) throw err; console.log ("success");});   

Например: чтение файла и запись в другой файл:

  var fs = require ('fs');  var path = process.cwd ();  fs.readFile (путь + "\ from.txt", function (err, data) {if (err) console.log (err) else {fs.writeFile (path + "\ to.text", function (erro) {  if (erro) console.log ("error:" + erro); else console.log ("success");});}});  

Улучшить этот ответ
ответил 23 октября 2016, 07:54
  • Где вы записываете данные в «to.text» ?? — Рави Шанкер Редди, 18 мая ’17 в 9:09
  • Что этот ответ добавляет к множеству уже существующих ответов о writeFile ? — Дэн Даскалеску 23 окт. ’19 в 10:37
добавить комментарий |

  var fs = require ('fs');  fs.writeFile (путь + "\ message.txt", "Привет", функция (err) {if (err) throw err; console. журнал ("успех");});   

Например: чтение файла и запись в другой файл:

  var fs = require ('fs');  var path = process.cwd ();  fs.readFile (путь + "\ from.txt", function (err, data) {if (err) console.log (err) else {fs.writeFile (path + "\ to.text", function (erro) {  if (erro) console.log ("error:" + erro); else console.log ("success");});}});  

7

Здесь мы используем w + для чтения/записи обоих действий, и если путь к файлу не найден, он будет создан автоматически.

  fs.open (path, 'w +', function (err, data) {if (err) {console.log ("ERROR !!"  + err);} else {fs.write (data, 'content', 0, 'content length', null, function (err) {if (err) console.log ("ERROR !!" + err); fs.  close (data, function () {console.log ('write success');})});}});  

Содержимое означает, что вы должны записать в файл и его длина, ‘content.length’.

Улучшите этот ответ
отредактировано 31 августа 2015 г. в 18:03
Peter Mortensen
27.4k2121 золотых знака9393 серебряных знака123123 бронзовых знака
ответил 01 октября 2014 в 17:39
добавить комментарий |

Здесь мы используем w + для чтения/записи обоих действий, и если путь к файлу не найден, он будет создан автоматически.

  fs.open (path, 'w +', function (err, data) {if (err) {console.log ("ERROR !!" + err);} else {fs  .write (data, 'content', 0, 'content length', null, function (err) {if (err) console.log ("ERROR !!" + err); fs.close (data, function () {  console.log ('письменный успех');})});}});  

Контент означает, что вы должны записать в файл и его длину, ‘content.length ‘.


6

Вот образец как читать файл csv из локального и записывать файл csv в локальный.

  var csvjson = require ('csvjson'), fs = require ('fs'), mongodb = require  ('mongodb'), MongoClient = mongodb.MongoClient, mongoDSN = 'mongodb://localhost: 27017/test', collection; function uploadcsvModule () {var data =  fs.readFileSync ('/home/limitless/Downloads/orders_sample. csv ', {кодировка:' utf8 '});  var importOptions = {delimiter: ',',//необязательная цитата: '"'//optional}, ExportOptions = {delimiter:", ", wrap: false} var myobj = csvjson.toSchemaObject (data, importOptions) var exportArr =  [], importArr = []; myobj.forEach (d => {if (d.orderId == undefined || d.orderId == '') {exportArr.push (d)} else {importArr.push (d)  }}) var csv = csvjson.toCSV (exportArr, ExportOptions); MongoClient.connect (mongoDSN, function (error, db) {collection = db.collection ("orders") collection.insertMany (importArr, function (err, result)  {fs.writeFile ('/home/limitless/Downloads/orders_sample1.csv', csv, {encoding: 'utf8'}); db.close ();});})} uploadcsvModule ()  

Улучшите этот ответ
ответил 1 сентября ’17 в 11:06
  • 1
    Это вводит всевозможные сложности (MongoClient, JSON и т. д.), которые не относятся к вопросу. — Дэн Даскалеску 23 окт. ’19 в 10:35
добавить комментарий |

Вот пример того, как читать файл csv из локального и записывать файл CSV в локальный.

   var csvjson = require ('csvjson'), fs = require ('fs'), mongodb = require ('mongodb'), MongoClient = mongodb.MongoClient, mongoDSN = 'mongodb://localhost: 27017/ test ', коллекция; функция uploadcsvModule () {var data = fs.readFileSync ('/home/limitless/Downloads/orders_sample.csv ', {encoding:' utf8 '});  var importOptions = {delimiter: ',',//необязательная цитата: '"'//optional}, ExportOptions = {delimiter:", ", wrap: false} var myobj = csvjson.toSchemaObject (data, importOptions) var exportArr =  [], importArr = []; myobj.forEach (d => {if (d.orderId == undefined || d.orderId == '') {exportArr.push (d)} else {importArr.push (d)  }}) var csv = csvjson.toCSV (exportArr, ExportOptions); MongoClient.connect (mongoDSN, function (error, db) {collection = db.collection ("orders") collection.insertMany (importArr, function (err, result)  {fs.writeFile ('/home/limitless/Downloads/orders_sample1.csv', csv, {encoding: 'utf8'}); db.close ();});})} uploadcsvModule ()  

5

fs.createWriteStream (path [, options])

options может также включать параметр start для разрешить запись данных в некоторой позиции за начало файла. Для изменения файла вместо его замены может потребоваться режим flags r + , а не режим по умолчанию w . Кодировка может быть любой из поддерживаемых Buffer.

Если для autoClose установлено значение true (поведение по умолчанию) в 'error' или 'finish' дескриптор файла будет закрыт автоматически. Если autoClose имеет значение false, дескриптор файла не будет закрыт, даже если возникнет ошибка. Приложение обязано закрыть его и убедиться в отсутствии утечки файлового дескриптора.

Как и ReadStream, если указан fd , WriteStream проигнорирует path и будет использовать указанный дескриптор файла. Это означает, что событие 'open' генерироваться не будет. fd должен блокировать; неблокирующие fd должны быть переданы в net.Socket.

Если options — это строка, то она определяет кодировка.

После прочтения этой длинной статьи. Вы должны понимать, как это работает. Итак, вот пример createWriteStream () .

 /* fs.createWriteStream () возвращает  (WritableStream {aka} internal.Writeable), и нам нужна кодировка как 'utf'-8 *//* WriteableStream имеет метод write () */fs.createWriteStream (' out.txt ',' utf-8 ')  .write ('привет, мир');  

Улучшите этот ответ
отредактировал 20 июня ’20 в 9:12
Сообщество ♦
111 серебряный значок
ответил 23 дек. ’18 в 2:39
  • createWriteStream уже упоминалось в нескольких ответах за годы до этого. — Дэн Даскалеску 23 окт. ’19 в 10:37
добавить комментарий |

fs.createWriteStream(path[,optionspting)

options может также включать параметр start , позволяющий записывать данные в некоторой позиции после начала файла. Для изменения файла вместо его замены может потребоваться режим flags r + , а не режим по умолчанию w . Кодировка может быть любой из поддерживаемых Buffer.

Если для autoClose установлено значение true (поведение по умолчанию) в 'error' или 'finish' дескриптор файла будет закрыт автоматически. Если autoClose имеет значение false, дескриптор файла не будет закрыт, даже если возникнет ошибка.. Приложение обязано закрыть его и убедиться в отсутствии утечки файлового дескриптора.

Как и ReadStream, если указан fd , WriteStream проигнорирует path и будет использовать указанный дескриптор файла. Это означает, что событие 'open' генерироваться не будет. fd должен блокировать; неблокирующие fd должны быть переданы в net.Socket.

Если options — это строка, то она определяет кодировка.

После прочтения этой длинной статьи. Вы должны понимать, как это работает. Итак, вот пример createWriteStream () .

 /* fs.createWriteStream () возвращает  (WritableStream {aka} internal.Writeable), и нам нужна кодировка как 'utf'-8 *//* WriteableStream имеет метод write () */fs.createWriteStream (' out.txt ',' utf-8 ')  .write ('привет, мир');  

3

Вы можете записывать в файлы потоками.

Просто сделайте это так:

  const fs = require ('fs'); const stream = fs.createWriteStream ('./test.txt'); stream.write ("Пример текста");  

Улучшить этот ответ
отредактировал 4 августа 2020 в 16:46
18 июня ’20 в 12:13
добавить комментарий |

Вы можете писать в файлы с потоками.

Просто сделайте это выглядит так:

  const fs = require ('fs'); const stream = fs.createWriteStream ('./test.txt'); stream.write ("Пример  text ");  

2

Вы можете использовать библиотеку easy-file-manager

сначала установить из npm npm install easy-file-manager

Пример загрузки и удаления файлов

  var filemanager = require ('easy-file-manager') var path = "/public" var filename =  "test.jpg" var data; //буферизованный файл изображенияmanager.upload (путь, имя файла, данные, функция (err) {if (err) console.log (err);}); filemanager.remove (path, "aa, имя файла, функция (isSuccess) {if (  err) консоль. log (err);});  

Улучшите этот ответ
ответил 4 мая ’16 в 17:15
  • 2
    Эти модули созданы для сохранения и удаления файлов. . Не ответ. — Грин, 9 окт., В 9:38
добавить комментарий |

Вы можете использовать библиотеку easy-file-manager

install сначала из npm npm install easy-file-manager

Образец для загрузки и удаления файлов

  var filemanager  = require ('easy-file-manager') var path = "/public" var filename = "test.jpg" var data; //буферизованный файл изображенияmanager.upload (путь, имя файла, данные, функция (err) {if (err) console.log (err);}); filemanager.remove (path, "aa, имя файла, функция (isSuccess) {if (  err) console.log (err);});  

0

Пункт 1:

Если вы хотите что-то записать в файл. означает: он удалит все, что уже было сохранено в файле, и запишет новый контент. используйте fs.promises.writeFile ()

Пункт 2:

Если вы хотите добавить что-то в файл. означает: он будет не удаляйте ничего, что уже было сохранено в файле, но добавьте новый элемент в содержимое файла. затем сначала прочтите файл, а затем добавьте содержимое в читаемое значение, затем запишите его в файл. поэтому используйте fs. promises.readFile и fs.promises.writeFile ()


пример 1: я хочу записать объект JSON в свой файл JSON.

  const fs = require ('fs');   

writeFile (filename, writedata) async function writeFile (filename, writedata) {try {await fs.promises.writeFile (filename, JSON.stringify (writedata, null, 4), ‘utf8’); return true} catch (err) {return false}}

Улучшите этот ответ
ответил 31 августа ’20 в 18:35
добавить комментарий |

Пункт 1:

Если вы хотите что-то записать в файл. означает: он все удалит уже сохранены в файле и напишите новый контент. используйте

Пункт 2:

Если вы хотите что-то добавить в файл. означает: он не удалит ничего, что уже было сохранено в файле, но добавит новый элемент в содержимое файла. затем сначала прочтите файл, затем добавьте содержимое в читаемое значение, затем запишите его в файл. поэтому используйте fs.promises.readFile и fs.promises.writeFile ()


, пример 1: я хочу написать объект JSON в моем Файл JSON.

  const fs = require ('fs');  

writeFile (filename, writedata) async function writeFile ( filename, writedata) {try {await fs.promises.writeFile (filename, JSON.stringify (writedata, null, 4), ‘utf8’); return true} catch (err) {return false}}


0

Точка 1:

Если вы хотите что-то записать в файл. означает: он удалит все, что уже было сохранено в файле, и запишет новый контент. используйте

Пункт 2:

Если вы хотите что-то добавить в файл. означает: он не удалит ничего, что уже было сохранено в файле, но добавит новый элемент в содержимое файла. затем сначала прочтите файл, а затем добавьте содержимое в доступное для чтения значение, затем запишите его в файл. поэтому используйте fs.promises.readFile и fs.promises.writeFile ()


, пример 1: я хочу написать объект JSON в моем Файл JSON.

  const fs = require ('fs'); writeFile ('./my_data.json', {id: 1, name: 'my name'})  асинхронная функция writeFile (имя файла, записанные данные) {попробуйте {ожидание fs.promises.writeFile (имя файла, JSON.stringify (записанные данные, null, 4), 'utf8');  console.log ('данные успешно записаны в файл')} catch (err) {console.log ('не удалось записать данные в файл')}}  

example2: если вы хотите добавить данные в файл JSON. вы хотите добавить данные {id: 1, name: ‘my name’} в файл my_data.json в том же корне папки. просто вызовите функцию append_data (file_path, data) .

Она добавит данные в файл JSON, если файл существовал. или он создаст файл и добавит в него данные.

  const fs = require ('fs');  data = {id: 1, name: 'my name'} file_path = './my_data.json' append_data (file_path, data) асинхронная функция append_data (filename, data) {if (fs.existsSync (filename)) {read_data =  await readFile (filename) if (read_data == false) {console.log ('не может прочитать файл')} else {read_data.push (data) dataWrittenStatus = await writeFile (filename, read_data) if dataWrittenStatus == true {console  .log ('данные успешно добавлены')} else {console.log ('сбой при добавлении данных')}} else {dataWrittenStatus = await writeFile (имя файла, [данные]) if dataWrittenStatus == true {console.log ('данные добавлены  успешно ')} else {console.log (' сбой при добавлении данных ')}}} async function readFile (filePath) {try {const data = await fs.promises.readFile (filePath,' utf8 ') return JSON. синтаксический анализ (данные)} catch (err) {return false;  }} асинхронная функция writeFile (имя файла, записанные данные) {попробуйте {ожидание fs.promises.writeFile (имя файла, JSON.stringify (writedata, null, 4), 'utf8');  return true} catch (err) {return false}}  

Улучшите этот ответ
ответил 31 августа ’20 в 18:42
добавить комментарий |

Пункт 1:

Если вы хотите что-то записать в файл. означает: он все удалит уже сохранены в файле и напишите новый контент. используйте

Пункт 2:

Если вы хотите что-то добавить в файл. означает: он не удалит ничего, что уже было сохранено в файле, но добавит новый элемент в содержимое файла. затем сначала прочтите файл, а затем добавьте содержимое в доступное для чтения значение, затем запишите его в файл. поэтому используйте fs.promises.readFile и fs.promises.writeFile ()


, пример 1: я хочу написать объект JSON в моем Файл JSON.

  const fs = require ('fs'); writeFile ('./my_data.json', {id: 1, name: 'my name'})  асинхронная функция writeFile (имя файла, записанные данные) {попробуйте {ожидание fs.promises.writeFile (имя файла, JSON.stringify (записанные данные, null, 4), 'utf8');  console.log ('данные успешно записаны в файл')} catch (err) {console.log ('не удалось записать данные в файл')}}  

example2: если вы хотите добавить данные в файл JSON. вы хотите добавить данные {id: 1, name: ‘my name’} в файл my_data.json в том же корне папки. просто вызовите функцию append_data (file_path, data) .

Она добавит данные в файл JSON, если файл существовал. или он создаст файл и добавит в него данные.

  const fs = require ('fs');  data = {id: 1, name: 'my name'} file_path = './my_data.json' append_data (file_path, data) асинхронная функция append_data (filename, data) {if (fs.existsSync (filename)) {read_data =  await readFile (filename) if (read_data == false) {console.log ('не может прочитать файл')} else {read_data.push (data) dataWrittenStatus = await writeFile (filename, read_data) if dataWrittenStatus == true {console  .log ('данные успешно добавлены')} else {console.log ('сбой при добавлении данных')}} else {dataWrittenStatus = await writeFile (имя файла, [данные]) if dataWrittenStatus == true {console.log ('данные добавлены  успешно ')} else {console.log (' сбой при добавлении данных ')}}} async function readFile (filePath) {try {const data = await fs.promises.readFile (filePath,' utf8 ') return JSON. синтаксический анализ (данные)} catch (err) {return false;  }} асинхронная функция writeFile (имя файла, записанные данные) {попробуйте {ожидание fs.promises.writeFile (имя файла, JSON.stringify (writedata, null, 4), 'utf8');  return true} catch (err) {return false}}  

-1

Вы можете записать в файл с помощью следующего примера кода:

  var data = [{'test': '123', '  test2 ':' Lorem Ipsem '}]; fs.open (datapath +'/data/topplayers.json ',' wx ', function (error, fileDescriptor) {if (! error && fileDescriptor) {var stringData = JSON.stringify  (данные); fs.writeFile (fileDescriptor, stringData, function (error) {if (! error) {fs.close (fileDescriptor, function (error) {if (! error) {callback (false);} else {callback (  'Ошибка при закрытии файла');}});} else {callback ('Ошибка при записи файла.');}});}});  

Улучшите этот ответ
отредактировал 7 ноября ’19 в 9:54
King Stone
2,01666 золотых знаков1212 серебряных знаков2929 бронзовых знаков
ответил 18 января ’19 в 12:10
  • 1
    writeFile уже давался в качестве ответа несколько раз, много лет назад. Что добавляет этот ответ? — Дэн Даскалеску 23 окт. ’19 в 10:39
  • И зачем открывать файл? Разве ответ не должен быть о записи файлов? — Михал 05 янв. ’20 в 22:23
добавить комментарий |

Вы можете писать в файл с помощью следующего примера кода:

  var data  = [{'test': '123', 'test2': 'Lorem Ipsem'}]; fs.open (datapath + '/data/topplayers.json', 'wx', function (error, fileDescriptor) {if (  ! error && fileDescriptor) {var stringData = JSON.stringify (data); fs.writeFile (fileDescriptor, stringData, function (error) {if (! error) {fs.close (fileDescriptor, function (error) {if (! error)  ) {callback (false);} else {callback ('Ошибка в закрытом файле');}});} else {callback ('Ошибка при записи файла.');}};}});   


Запись файлов с помощью Node

Самый простой способ записи файлов в Node .js — использовать fs.writeFile () API.

Пример:

  const fs = require ('fs') const content = 'Некоторое содержимое!' fs.writeFile ('/Users/flavio/test. txt ', content, (err) => {if (err) {console.error (err) return}//файл успешно записан})  

В качестве альтернативы, вы можете использовать синхронную версию fs.writeFileSync () :

  const fs = require ('fs') const  content = 'Some content!' попробуйте {const data = fs.writeFileSync ('/Users/flavio/test.txt', content)//файл записан успешно} catch (err) {console.error (err)}  

По умолчанию этот API заменяет содержимое файла , если он уже существует.

Вы можете изменить значение по умолчанию, указав флаг:

  fs.writeFile ('/Users/flavio/test.txt', content, {flag: '  a + '}, (err) => {})  

Вероятно, вы будете использовать следующие флаги

  • r + открыть файл для чтения и записи
  • w + открыть файл для чтения и записи, располагая поток в начало файла. Если файл не существует.
  • a откройте файл для записи, поместив поток в конец файла. Если файл не существует, создается
  • a + , открывает файл для чтения и записи, помещая поток в конец файла. Если файл не существует

(дополнительные флаги можно найти на https://nodejs.org/api/fs.html#fs_file_system_flags)

Добавить в файл

Удобный метод добавления содержимого в конец файла — это fs.appendFile () (и его fs.appendFileSync () аналог):

  const content = 'Some content!' fs.appendFile ('file.log', content  , (err) => {if (err) {console.error (err) return}//готово!})  

Использование потоков

Все эти методы записывают полное содержимое в файл перед возвратом элемента управления обратно в вашу программу (в асинхронной версии это означает выполнение обратного вызова)

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

Загрузить мое бесплатное руководство по Node.js

Подробнее учебные пособия:

  • Введение в диспетчер пакетов npm
  • Введение в Node.js
  • HTTP-запросы с использованием Axios
  • Куда разместить приложение Node.js.
  • Взаимодействовать с Google Analytics API с помощью Node.js.
  • Средство выполнения пакетов npx Node
  • Пакет .json руководство
  • Где npm устанавливает пакеты?
  • Как обновить Node.js
  • Как использовать или выполнить пакет установлен с помощью npm
  • Файл package-lock.json
  • Семантическое управление версиями с использованием npm
  • Следует ли зафиксировать папку node_modules в Git?
  • Обновите все зависимости Node до последней версии.
  • Разбор JSON с помощью Node.js
  • Найдите установленную версию пакета npm
  • Узел. js Streams
  • Установить старую версию пакета npm
  • Получить текущую папку в Node
  • Как зарегистрировать объект в Node
  • Предоставление функциональности из файла узла с помощью экспорта
  • Различия между узлом и браузером
  • Сделайте запрос HTTP POST с помощью узла
  • Получить данные тела HTTP-запроса с помощью Node
  • Node Buffers
  • Краткая история Node.js
  • Как установить Node.js
  • Сколько JavaScript вам нужно знать, чтобы использовать Node?
  • Как использовать Node.js REPL
  • Узел, принимает аргументы из командной строки
  • Вывод в командную строку с помощью узла
  • Принять ввод из командной строки в узле
  • Удаление пакетов npm с помощью `npm uninstall`
  • глобальные или локальные пакеты npm
  • зависимости npm и devDependencies
  • The Node. js Event Loop
  • Общие сведения о process.nextTick ()
  • Общие сведения о setImmediate ()
  • Узел Генератор событий
  • Создание HTTP-сервера
  • Выполнение HTTP-запросов с помощью Node
  • Модуль Node fs
  • HTTP-запросы в Node с использованием Axios
  • Чтение файлов с помощью Node
  • Пути к файлам узла
  • Запись файлов с помощью Node
  • Статистика файлов узла
  • Работа с дескрипторами файлов в узле
  • Работа с папками в узле
  • Модуль пути к узлу
  • HTTP-модуль Node
  • Использование WebSockets с Node.js
  • Основы работы с MySQL и Node
  • Обработка ошибок в Node.js
  • Руководство по Pug
  • Как читать переменные среды из Node.js
  • Как выход из программы Node.js
  • Модуль Node os
  • Модуль событий Node
  • Node, разница между разработкой и производством
  • Как проверить, существует ли файл в Node.js
  • Как создать пустой файл в Node.js
  • Как удалить файл с помощью Node.js
  • Как получить дата последнего обновления файла с использованием Node.js
  • Как определить, является ли дата сегодняшним днем ​​в JavaScript
  • Как записать объект JSON в файл в Node. js
  • Почему вам следует использовать Node.js в вашем следующем проекте?
  • Запускать веб-сервер из любой папки
  • Как использовать MongoDB с Node.js
  • Используйте Chrome DevTools для отладки приложения Node.js.
  • Что такое pnpm?
  • The Node. js Runtime v8 options list
  • Как исправить ошибку «Отсутствует доступ для записи» при использовании npm
  • Как включить ES-модули в Node.js
  • Как создать дочерний процесс с помощью Node.js
  • Как получить как проанализированное, так и необработанное тело в Express
  • Как обрабатывать загрузку файлов в Node .js
  • Что такое взаимозависимости в модуле Node?
  • Как написать файл CSV с помощью Node.js
  • Как читать CSV-файл с помощью Node.js.
  • Модули ядра узла
  • Увеличение номеров нескольких папок одновременно с помощью Node. js
  • Как распечатать холст по URL-адресу данных
  • Как создать и сохранить изображение с помощью Node.js и Canvas
  • Как загрузить изображение с помощью Node.js
  • Как массово переименовать файлы в Node.js
  • Как получить имена всех файлов в папке в Node
  • Как использовать обещания и ожидания с функциями на основе обратного вызова Node.js
  • Как протестировать пакет npm локально
  • Как проверить текущую версию Node.js во время выполнения
  • Как использовать Sequelize для взаимодействия с PostgreSQL
  • Обслуживать HTML-страницу с помощью Node.js
  • Как устранить ошибку `util.pump is not a function` в Node.js

Оцените статью
logicle.ru
Добавить комментарий