nodejs中追加内容到文件

时间:2022-07-27
本文章向大家介绍nodejs中追加内容到文件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

最近在使用nodejs写日志记录的时候,发现一个问题:使用fs模块读写文件,调用writeFile(path,data)或者writeFileSync(path,data)时会将日志文件原来的内容给覆盖掉,显然这不是我所想要的结果,我想要的效果是在文件末尾追加,所以需要使用appendFile(path,data)或者appendFileSync(path,data)方法。以下内容转载自nodejs中追加内容到文件

我们在nodejs开发中,有时候会遇到文件读写问题,在写文件的时候,我们会有这样的场景,需要向文件中循环添加内容,这时候,如果调用writeFile(path,data)或者writeFileSync(path,data),只会将最后一次写入的内容加入到文件中,而不是追加内容到文件,如果想要将内容追加到文件中,我们需要使用appendFile(path,data)或者appendFileSync(path,data)方法。

我们看如下示例:

var fs = require("fs")
var os = require("os");
var path = require("path");
 
function readFile(filePath){
	fs.readFile(filePath,'utf-8',(err,data)=>{
		if(err){
			console.log(err);
			return;
		}
		console.log(data);
	})
}
var contents = ['hello nodejs.','今天是2020年2月27日。','中国面临新型冠状病毒肺炎疫情的困扰。','武汉加油。'];
function writeFile(filePath){
	for(var i=0;i<contents.length;i++){
		fs.writeFileSync(filePath,contents[i]+os.EOL);
		//fs.appendFileSync(filePath,contents[i]+os.EOL);
	}
}
 
writeFile("test2.txt");
/*
console.log(path.resolve('.'+path.sep));
console.log(__dirname)
console.log(process.cwd())
*/
readFile("test2.txt");

运行这段代码,打印信息如下:

可以看到,当我们循环写入文件内容时,前面写入的内容被覆盖了,因为我们调用的是writeFile或者writeFileSync方法。当我们更改为追加appendFile或者appendFileSync时,删除生成的文件,重新运行程序,查看打印信息:

通过示例,我们也可以看出writeFile和appendFile的区别了,一个是相当于替换,一个是文件末尾追加,另外,不管是writeFile还是appendFile,当文件不存在时,会自动创建,而不是报错。 我们为了让内容换行,每行内容增加了os.EOL这个结束字符。 这样,在文件中,我们可以看到内容也是换行的。

另外,我这里有中文,但是没有额外指定编码方式,没有出现中文乱码问题,我这里的js文件是通过VSCode编写,编码采用的是UTF-8。

参考资料