ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Node.js Stream(流)--文件操作

2020-03-10 14:04:20  阅读:144  来源: 互联网

标签:Node fs console stream Stream js test var txt


Node.js中的Stream 有四种流类型:

  • Readable - 可读操作。

  • Writable - 可写操作。

  • Duplex - 可读可写操作.

  • Transform - 操作被写入数据,然后读出结果。

 

所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

  • data - 当有数据可读时触发。

  • end - 没有更多的数据可读时触发。

  • error - 在接收和写入过程中发生错误时触发。

  • finish - 所有数据已被写入到底层系统时触发。

 

先创建一个test.txt

cyy在学习node.js

然后是main.js

var fs=require("fs");
var mydata="";

//创建可读流
var stream=fs.createReadStream("test.txt");
//设置编码
stream.setEncoding("utf8");


stream.on("data",function(data){
    mydata+= data;
})
stream.on("end",function(){
    console.log(mydata);
})
stream.on("error",function(err){
    console.log(err.stack);
})

console.log("读取文件结束");

打印结果:

 

 

写入流(写入文件)

mian.js

var fs=require("fs");
var mydata="这是我要写入文件的内容";

//创建可读流
var stream=fs.createWriteStream("test.txt");
//设置编码
stream.write(mydata,"utf8");

stream.end();//标记文件末尾
stream.on("finish",function(){
    console.log("写入结束");
})
stream.on("error",function(err){
    console.log(err.stack);
})

console.log("操作结束");

然后查看刚才的test.txt

这是我要写入文件的内容

 

 

管道流(文件内容复制)

管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

首先test.txt

这是在test.txt中的内容

然后test2.txt为空

main.js

var fs=require("fs");
var mydata="这是我要写入文件的内容";

//创建可读流
var stream=fs.createReadStream("test.txt");
//创建可写流
var stream2=fs.createWriteStream("test2.txt");

stream.pipe(stream2);

console.log("复制结束");

 

 

此时查看原本为空的test2.txt

这是在test.txt中的内容

 

链式流(可用于解压缩文件)

链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。

首先压缩文件操作:

var fs=require("fs");
var zlib=require("zlib");

//压缩
fs.createReadStream("test.txt")
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream("test.txt.gz"));

console.log("压缩结束");

 

 

 

 

然后是解压操作:

var fs=require("fs");
var zlib=require("zlib");

//解压
fs.createReadStream("test.txt.gz")
    .pipe(zlib.createGunzip())
    .pipe(fs.createWriteStream("test3.txt"));

console.log("解压结束");

 

 

 

标签:Node,fs,console,stream,Stream,js,test,var,txt
来源: https://www.cnblogs.com/chenyingying0/p/12455281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有