node —— fs文件系统文件流

注意:这里node版本是v12.18.1,不同版本请查看官方中文文档
英语好的同学可以看这里

  • 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);

总结

  • 使用管道流可以简化操作,使用更方便
    \color{pink}{欢迎交流讨论}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容