流(strem)在node.js中是处理流数据的抽象接口。
8. 流操作
(2)读取流
- Fs.createReadStream()
- readStream对象:
例子:
// 导入文件系统
const fs = require('fs');
// 可读流 读取流
// 创建读取流
const rs = fs.createReadStream('file/1.txt',{});
rs.on('open',function () {
console.log('可读流开启');
});
// chunk接收的内容
rs.on('data',function (chunk) {
console.log(chunk.toString());
});
rs.on('end',function () {
console.log('读取完毕');
});
rs.on('close',function () {
console.log('可读流完毕');
});
(2)写入流
- Fs.createWriteStream()
- writeStream
例子:
// 导入文件系统
const fs = require('fs');
// 创建可写流
const ws = fs.createWriteStream('file/2.txt',{});
ws.write('你好世界');
// 必须手工结束,可写流中没有ws.on('end')
ws.end();
ws.on('open',function (fd) {
console.log('文件已打开,可写流开始');
});
ws.on('close',function () {
console.log('可写流关闭');
});
(3)使用流复制文件
- 用于复制大文件
例子:
// 导入文件系统
const fs = require('fs');
// 大型文件的复制,把内容从可读流中复制到可写流中
// 创建可读流
const rs = fs.createReadStream('file/1.txt');
// 创建可写流
const ws = fs.createWriteStream('file/3.txt');
let buf = Buffer.alloc(0);
rs.on('data',function (chunk) {
// 拼接从流中读取的内容
buf = Buffer.concat([buf,chunk]);
});
rs.on('end',function () {
ws.write(buf);
ws.end();
});
ws.on('close',function () {
console.log('文件复制成功');
});
- pipe管道
例子:
// 导入文件系统
const fs = require('fs');
// 大型文件复制
const rs = fs.createReadStream('file/2.txt');
const ws = fs.createWriteStream('file/4.txt');
// 使用管道,把内容从可读流中复制到可写流中
rs.pipe(ws);
ws.on('close',function () {
console.log('文件复制成功');
});