美文网首页Nodejs、TypeScript和Vuejs
nodejs中追加内容到文件

nodejs中追加内容到文件

作者: 雪域迷影 | 来源:发表于2020-10-10 11:29 被阅读0次

    最近在使用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。

    参考资料

    相关文章

      网友评论

        本文标题:nodejs中追加内容到文件

        本文链接:https://www.haomeiwen.com/subject/epidpktx.html