最近在使用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");
运行这段代码,打印信息如下:
writeFileSync
可以看到,当我们循环写入文件内容时,前面写入的内容被覆盖了,因为我们调用的是writeFile或者writeFileSync方法。当我们更改为追加appendFile或者appendFileSync时,删除生成的文件,重新运行程序,查看打印信息:
appendFileSync
通过示例,我们也可以看出writeFile和appendFile的区别了,一个是相当于替换,一个是文件末尾追加,另外,不管是writeFile还是appendFile,当文件不存在时,会自动创建,而不是报错。
我们为了让内容换行,每行内容增加了os.EOL这个结束字符。
这样,在文件中,我们可以看到内容也是换行的。
test2.txt
另外,我这里有中文,但是没有额外指定编码方式,没有出现中文乱码问题,我这里的js文件是通过VSCode编写,编码采用的是UTF-8。
网友评论