使用 Node.js 将一行写入 .txt 文件

问题描述 投票:0回答:5

我想使用 Node.js 创建一个简单的日志系统,它将上一行之前的一行打印到 .txt 文件中。但是,我不知道 Node.js 的文件系统功能是如何工作的。

有人可以解释一下吗?

node.js fs
5个回答
219
投票

将数据插入文本文件的中间并不是一项简单的任务。如果可能,您应该将其附加到文件末尾。

将数据附加到某些文本文件的最简单方法是使用

fs.appendFile(filename, data[, options], callback)
模块中的内置 fs
 函数
:

var fs = require('fs')
fs.appendFile('log.txt', 'new data', function (err) {
  if (err) {
    // append failed
  } else {
    // done
  }
})

但是如果你想多次将数据写入日志文件,那么最好使用

fs.createWriteStream(path[, options])
函数来代替:

var fs = require('fs')
var logger = fs.createWriteStream('log.txt', {
  flags: 'a' // 'a' means appending (old data will be preserved)
})

logger.write('some data') // append string to your file
logger.write('more data') // again
logger.write('and more') // again

每次您调用

.write
时,Node 都会不断将新数据附加到您的文件中,直到您的应用程序关闭,或者直到您手动关闭调用
.end
的流:

logger.end() // close string

请注意,上例中的

logger.write
不会写入新行。将数据写入新行:

var writeLine = (line) => logger.write(`\n${line}`);
writeLine('Data written to a new line');

9
投票

只需使用

fs
模块和类似的东西:

fs.appendFile('server.log', 'string to append', function (err) {
   if (err) return console.log(err);
   console.log('Appended!');
});

5
投票

步骤1

如果您的文件很小 将所有文件数据读入内存

第2步

将文件数据字符串转换为数组

第3步

搜索数组以找到要插入文本的位置

第4步

确定位置后,插入文字

yourArray.splice(index,0,"new added test");

第5步

将数组转换为字符串

yourArray.join("");

第6步

像这样写你的文件

fs.createWriteStream(yourArray);

如果您的文件太大,不建议这样做


3
投票

我创建了一个日志文件,它使用“Winston”记录器将数据打印到文本文件中。源代码在下面,

const { createLogger, format, transports } = require('winston');
var fs = require('fs')
var logger = fs.createWriteStream('Data Log.txt', {
  flags: 'a' 
})
const os = require('os');
var sleep = require('system-sleep');
var endOfLine = require('os').EOL;
var t = '             ';
var s = '         ';
var q = '               ';
var array1=[];
var array2=[];
var array3=[];
var array4=[];
              
array1[0]  =  78;
array1[1]  =  56;
array1[2]  =  24;
array1[3]  =  34;
                  
for (var n=0;n<4;n++)
{
  array2[n]=array1[n].toString();
}
                 
for (var k=0;k<4;k++)
{
  array3[k]=Buffer.from('                    ');
}

for (var a=0;a<4;a++)  
{
  array4[a]=Buffer.from(array2[a]);
}

for (m=0;m<4;m++)
{
  array4[m].copy(array3[m],0);
}

logger.write('Date'+q);
logger.write('Time'+(q+'  '))
logger.write('Data 01'+t);
logger.write('Data 02'+t); 
logger.write('Data 03'+t);
logger.write('Data 04'+t)

logger.write(endOfLine);
logger.write(endOfLine);

function mydata()      //user defined function
{
  logger.write(datechar+s);
  logger.write(timechar+s);
  for ( n = 0; n < 4; n++) 
  {
   logger.write(array3[n]);
  }
  logger.write(endOfLine); 
}

var now = new Date();
var dateFormat = require('dateformat');
var date = dateFormat(now,"isoDate");
var time = dateFormat(now, "h:MM:ss TT ");
var datechar = date.toString();
var timechar = time.toString();
mydata();
sleep(5*1000);

0
投票

Node.js 可以使用流从源读取数据并将数据写入源。

不要读取文件的全部内容并将其存储在占用内存资源的 RAM 中,而是使用流。流“逐个”按顺序处理数据,而不是一次处理所有数据。

使用 fs 节点核心模块创建可写流。

const fs = require('fs');

const writeInterface = fs.createWriteStream(`${__dirname}/myTextFile.txt`, { flags: 'a',
});

const shoppingList = ['dozen organic eggs', 'oat milk', 'cane sugar', 'sushi rice', 'nori', 'sesame seeds', 'soy sauce', 'rice vinegar', 'coffee'];

shoppingList.forEach(item => writeInterface.write(`${item}\n`));

// indicate the end of the of the writeStream with the end method
writeInterface.end();
© www.soinside.com 2019 - 2024. All rights reserved.