2017-01-14-Nodejs全栈开发之路-nodejs模块fs(可读流和可写流)

Author:@南非波波

fs模块

  • 可读流createReadStream

    可读流触发的事件

    • data 绑定一个data事件监听器会将流切换成流动模式,数据会被尽可能的读出
    • end 该事件会在读完数据后触发
    • error 当数据接收时发生错误时触发

      可读流的方法

    • setEncoding 指定编码
    • pause 通知对象停止触发data事件
    • resume 通知对象恢复触发事件
    • pipe 设置管道,将可读流里的内容导入到参数指定的可写流里
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var fs = require('fs');
var rs = fs.createReadStream('./README.md',{
flags:'r',//表示打开文件进行读操作
// encoding:'utf8' //得到的数据是Buffer对象。指定编码输出
//下面两个参数可以进行截取读取,取值范围str[i] :start<= i <= end
start:1, //读取文件内容的起始位置
end:3 //读取文件内容的结束位置
});
rs.setEncoding('utf8');//或者可以在创建流之后进行指定编码类型
//流是EnventEmitter的子类
rs.on('data',function (data) {
console.log(data); //输出:<Buffer 23 32 30 31 36 31 32 6e 6f 64 65 0d 0a>
//输出:#201612node
});
//当读完文件的时候会触发end事件
rs.on('end',function () {
console.log('读完了!');
});
//当读取文件出错的时候会监听到,输出相应的错误
rs.on('error',function (err) {
console.log('出错了:',err);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var fs = require('fs');
var rs = fs.createReadStream('./README.md',{
flags:'r',
encoding:'utf8',
highWaterMark:5
});
rs.on('data',function (data) {
console.log(data);
rs.pause();//暂停触发data事件
});
setTimeout(function () {
rs.resume();//5秒钟之后继续触发data事件
},5000);
rs.on('end',function () {
console.log('读取完毕!');
});
rs.on('error',function (err) {
console.log('读取数据出错:',err);
});
//输出:#2016
//12nod
  • 可写流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var fs =require('fs');
function copy(src,dst) {
var rs = fs.createReadStream(src);
var ws = fs.createWriteStream(dst);
rs.on('data',function (data) {
var flag = ws.write(data);
if(!flag){
rs.pause();
}
});
ws.on('drain',function () {
rs.resume()
});
rs.on('end',function () {
ws.end();
});
rs.on('error',function (err) {
console.log(err);
})
}
copy('1.txt','2.txt');
//复制,同copy函数
var rs = fs.createReadStream('./1.txt');
var ws = fs.createWriteStream('./3.txt');
rs.pipe(ws);
文章目录
  1. fs模块