Запись файлов в Node.js

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

В API файловой системы много деталей. Самый распространенный способ (насколько я знаю):

var fs = require('fs'); fs.writeFile("/tmp/test", "Hey there!", function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); }); 

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

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

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

  2. fs.writeFile(filename, data, [encoding], callback)

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

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

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

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

Другими словами: «Буфер» – это объект. Независимо от того, «буферизовано» или нет, это свойство этого объекта.

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

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

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

Ты делаешь:

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

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

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

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

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

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

 var fs = require('fs'); var stream = fs.createWriteStream("my_file.txt"); stream.once('open', function(fd) { stream.write("My first row\n"); stream.write("My second row\n"); stream.end(); }); 
 var path = 'public/uploads/file.txt', buffer = new Buffer("some content\n"); fs.open(path, 'w', function(err, fd) { if (err) { throw 'error opening file: ' + err; } fs.write(fd, buffer, 0, buffer.length, null, function(err) { if (err) throw 'error writing file: ' + err; fs.close(fd, function() { console.log('file written'); }) }); }); 

Мне понравился индекс ./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 in file helloworld.txt, just check it'); }); 

Содержание helloworld.txt:

 Hello World! 

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

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

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

  var fs = require('fs'); var path = process.cwd(); fs.readFile(path+"\\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"); }); } }); 

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

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

 fs = require('fs'); fs.writeFileSync("synchronous.txt", "synchronous write!") 

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

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

 fs = require('fs'); fs.writeFile('asynchronous.txt', 'asynchronous write!', (err) => { if (err) throw err; console.log('The file has been saved!'); }); 

где

 file  |  |  |  filename or file descriptor data  |  |  options  |  callback  

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

Здесь мы используем 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('written success'); }) }); } }); 

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

Вот пример того, как читать файл 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', { encoding : 'utf8'}); var importOptions = { delimiter : ',', // optional quote : '"' // 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() 

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

 var fs = require('fs'); for (var i=0; i<10; i++){ fs.appendFileSync("junk.csv", "Line:"+i+"\n"); } 

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

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

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

 var filemanager = require('easy-file-manager') var path = "/public" var filename = "test.jpg" var data; // buffered image filemanager.upload(path,filename,data,function(err){ if (err) console.log(err); }); filemanager.remove(path,"aa,filename,function(isSuccess){ if (err) console.log(err); }); 
  • Get 'spawn cmd ENOENT' при попытке создать приложение Кордовы (event.js: 85)
  • socket.io и выразить 4 сеанса
  • Схема Mongoose не была зарегистрирована для модели
  • Как сохранить настройки / файлы конфигурации Node.js?
  • Сценарий и аргументы оболочки Node.js
  • Автоматический запуск узла.js-сервера при загрузке
  • npm ERR! Ошибка: подключите ECONNREFUSED
  • Автоматическое соединение HTTPS / redirect с node.js / express
  • Загрузите модуль node.js из строки в памяти
  • поле мангуста с типом имени
  • Mongoose удалить элемент массива в документе и сохранить
  • Давайте будем гением компьютера.