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中一并查看,可以说是非常省事了。
上一篇: 在前端开发中,如何mock数据