欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nodejs学习笔记01-利用数据流将A.txt内容传入B.txt

程序员文章站 2022-07-09 22:42:51
...

当我们有两个txt文件input.txt与output.txt,需要将input.txt的值传入output又不希望改变output中的值时,可以先将input与output的值利用createReadStream全读取出来再合并,在读取结束将合并数据放入ouput中。这样的做法最直观,但有点傻瓜式,而且来回读取写入数次,总觉得太过麻烦,也容易出错。

let fs = require('fs');
let data = '';
let data2 = '你的小青蛙是真的可爱';
//1.读取流
let readStream = fs.createReadStream("input.txt");
readStream.setEncoding('UTF8');
//处理流事件
readStream.on('data', chunk => data += chunk);
readStream.on('end', () => writeS(data));
readStream.on("error", err => console.log(err.strck));
console.log("程序1执行完毕");
//2.写入流
let writeS = dataS =>{
    let writeStream = fs.createWriteStream("outInput.txt");
    writeStream.write(data2+dataS, "UTF8");
    //标记文件末尾
    writeStream.end();
    writeStream.on("finish", () => console.log("写入完成")); 
    writeStream.on("error", err => console.log(err.stack));   
    console.log("程序2执行完毕");
}

第二种方法就简略了很多,利用nodejs中的Promise并发请求后将数据填充进output.txt

//引入fs模块
var fs =  require("fs")

//封装请求文件数据的函数
function getFileData(fileName){
 return new Promise(resolve=>{
    var readStream = fs.createReadStream(fileName)  
    readStream.setEncoding('UTF8')
    readStream.on("data",chunk=>resolve(chunk))
  }) 
}

//并发请求
Promise.all([getFileData("input.txt"),getFileData("output.txt")]).then(result=>{
   var writeStream = fs.createWriteStream("output.txt");
   //讲两个文件的内容重新再写入到output.txt中
   writeStream.write(result[0]+","+result[1],"UTF8");
   writeStream.end();
   //再获取output.txt文件的内容
   fs.readFile("output.txt",(err,content)=>console.log(content.toString()))
})

顺道如果出错也能将错误结果在then中一并查看,可以说是非常省事了。

相关标签: 前端 nodejs