如何在javascript中写入文本文件而不覆盖文本?

Posted

技术标签:

【中文标题】如何在javascript中写入文本文件而不覆盖文本?【英文标题】:How to write to text file in javascript without overwriting text? 【发布时间】:2020-03-28 19:18:20 【问题描述】:

我过去对这个主题所做的研究表明这段代码:

    const filestream = require('fs');
    for(let a = 0; a < 4; a++) 
        fs.writeFileSync('test.txt', 'test' + a + '\n', 'UTF-8', 'flags': 'a');
    

应该输出

测试0 测试1 测试2 测试3

到 test.txt。但是,我看到的只是 test3,表明每次写入文件都会覆盖所有现有文本。尽管我使用了“a”标志。这是怎么回事?

【问题讨论】:

这能回答你的问题吗? How to append to a file in Node? 【参考方案1】:

我认为您应该为此使用另一个功能,您可以尝试以下方法吗?

fs.appendFileSync('test.txt', 'test' + a + '\n');

【讨论】:

***.com/questions/3459476/… AppendFile 不适合用于大型文件追加。【参考方案2】:

fs.writeFileSync() 将文件的全部内容替换为您的新内容。它不会将内容附加到末尾。有多种方法可以追加到文件的末尾。

最简单的机制是fs.appendFileSync(),这对你有用,但在循环中调用它不是很有效,因为在内部,fs.appendfileSync() 将调用fs.openSync(),@ 987654325@ 和 fs.closeSync() 用于每次循环。

最好先打开文件一次,写完所有的内容,然后关闭文件。

const fs = require('fs');

const fd = fs.openSync('temp.txt', 'w');
for (let a = 0; a < 4; a++) 
    fs.writeSync(fd, 'test' + a + '\n', 'utf-8');

fs.closeSync(fd);

或者,您可以收集您的数据,然后一次性全部写入:

let data = [];
for (let a = 0; a < 4; a++) 
    data.push('test' + a + '\n');
    
fs.writeFileSync('temp.txt', data.join(''), 'utf-8');

【讨论】:

以上是关于如何在javascript中写入文本文件而不覆盖文本?的主要内容,如果未能解决你的问题,请参考以下文章

写入文本文件而不覆盖它

PHP 中如何在同一个文件中写入而不覆盖以前写的内容

如何用fortran 在文本文件最后写入内容

python如何写入文本的最末行?

在C语言中,fopen一个文件 如何能够在写入新的数据覆盖原文件中指定长度的内容

如何在java中的文本文件中写入而不删除之前的文件内容