【问题标题】:How to loop over an array and write each iteration to the same file [nodejs]如何遍历数组并将每次迭代写入同一个文件 [nodejs]
【发布时间】:2018-10-15 20:53:16
【问题描述】:

我有一个要循环的数据数组,在循环时我想将它们写入同一个文件。我怎样才能做到这一点,我的以下代码只会打印最后一次迭代。

for (j = 0; j < arrayPart.length; j++){
    fs.writeFileSync('message.txt', arrayPart[j])
}

message.txt 的最后一个值为arrayPart

【问题讨论】:

  • writeFile 会在您每次调用时覆盖该文件。参见the docs,具体来说是“将数据写入文件,如果文件已存在则替换该文件。”

标签: javascript node.js for-loop


【解决方案1】:

只需join 数组并写入文件一次:

fs.writeFileSync('message.txt', arrayPart.join(""));

【讨论】:

  • 是的,它成功了!现在我还有一个问题,arrayPart 数组的大小为 600 字节。但我只需要它的 200 个字节,我怎么能提到它的大小,而循环它应该只写 200 个字节
  • @NidhiSharma arrayPart.join("") 将产生一个字符串。如果您只想写入该字符串的前 200 个字符,则可以将其分割为 fs.writeFileSync('message.txt', arrayPart.join("").slice(0, 200));
  • @NidhiSharma 以防字符串包含一些多字节字符,并且您想要正好 200 个字节,然后只需 transform it into a buffer 先切片该缓冲区:fs.writeFileSync('message.txt', Buffer.from(arrayPart.join(""), "utf8").slice(0, 200));
  • 好的,知道了。但是 arrayPart 是我们从几个 URL 获得的响应数组,在某些情况下我们可能想要编写图像(如 sample.jpg)。这也有助于我将其写入图像文件
  • @NidhiSharma 我不确定。如果数组包含缓冲区而不是字符串,那么join 将无法按预期工作,您可能需要为此使用Buffer.concatfs.writeFileSync('sample.jpg', Buffer.concat(arrayPart))Buffer.concat 返回一个缓冲区,因此您可以像以前一样在其上使用 slice
【解决方案2】:

我不会在每次迭代时打开/写入/关闭,而是打开一个写入流,在循环内写入并在最后关闭:

 const message = fs.createWriteStream(__dirname + "./message.txt");
 for (let j = 0; j <arrayPart.length; j++){
      message.write(arrayPart[j]);
 }
 message.close();

或者你只是加入数组并一次写入:

 fs.writeFileSync('message.txt', arrayPart.join(""));

【讨论】:

  • 是的,它成功了!现在我还有一个问题,arrayPart 数组的大小为 600 字节。但我只需要 200 个字节,我怎么能提到它的大小,而循环它应该只写 200 个字节。
  • @nidhi 数组里面有什么?
  • arrayPart 是我们通过点击几个 URL 获得的响应数组,我已将所有响应存储在一个数组中(名称为 arrayPart)。现在我正在遍历 arrayPart 并将其写入文件。因为我希望文件具有特定的大小。如果文件不是“.txt”而是“.jpg”,我也可以使用相同的东西
猜你喜欢
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多