- fs.createWriteStream()
写入流
const fs = require("fs");
// 1、创建写入流
let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});
// 监听文件打开事件
ws.on('open',function(){
console.log("文件打开");
});
// 监听准备事件
ws.on('ready',function(){
console.log("文件写入已准备状态");
})
// 监听文件关闭事件
ws.on('close',function(){
console.log("文件写入完成,关闭");
});
// 文件流式写入
ws.write("helloworld1!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容1流入完成");
}
});
ws.write("helloworld2!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容2流入完成");
}
});
ws.write("helloworld3!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容3流入完成");
}
});
// 文件写入完成 end 要在最后的write后面写,不然会报错,所有的write执行完后写
ws.end(function(){
console.log("文件写入关闭");
});
// 结果
文件打开
文件写入已准备状态
内容1流入完成
内容2流入完成
内容3流入完成
文件写入关闭
文件写入完成,关闭
- fs.createReadStream()
读取流
const fs = require("fs");
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
console.log("读取流结束");
});
rs.on('data',function(chunk){
console.log("单批数据流入"+chunk.length);
console.log(chunk);
});
- 下面使用以上两个方式写个示例,
读取hello.txt中的内容,写入hello1.txt
const fs = require("fs");
// 创建读取流,语法:fs.createReadStream(路径,【可选的配置项】)
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
let ws = fs.createWriteStream('hello1.txt',{flags:'w',encoding:"utf-8"});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
ws.end(() => {
console.log('end');
});
console.log("读取流结束");
});
// 每一批数据流入完成
rs.on('data',function(chunk){
console.log("单批数据流入"+chunk.length);
console.log(chunk);
ws.write(chunk,() => {
console.log("单批输入流入完成");
});
});
- 改进版,使用管道流pipe()
const fs = require("fs");
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
let ws = fs.createWriteStream('hello2.txt',{flags:'w'});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
console.log("读取流结束");
});
// 管道读写流
rs.pipe(ws);
总结
- 使用管道流可以简化操作,使用更方便