常用的流的操作:
(1)从流中读取数据:
首先准备一个input.txt组件,任意输入一些内容
实例:
/*从流中读取数据*/
var fs = require('fs');
var data = '';
// 创建可读流
var readerStream = fs.createReadStream('./input.txt');
// 设置编码为UTF-8
readerStream.setEncoding('UTF8');
// 处理流事件 --> data,end, and, error
readerStream.on('data', function(chunk){
data += chunk;
console.log(chunk)
});
// 读取数据完毕执行
readerStream.on('end',function(){
console.log(data);
});
// 读取文件出错的时候执行
readerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程序执行完毕");
(2)写入流
/* 写入流 */
var output = require('fs');
var outputData = '我是要写入到input.txt文件中的数据';
// 创建一个可以写入的流,写入到文件input.txt中
var writerStream = output.createWriteStream('./input.txt');
// 使用 UTF8 编码写入数据
writerStream.write(outputData, 'UTF8');
// 处理流事件 --> data, end, and, error
writerStream.on('finish', function(){
console.log('写入完成');
})
writerStream.on('error', function(err){
console.log(err.stack)
})
console.log('写入文件程序执行完毕')
(3)管道流:(就那个一个文件中的数据传输到另一个文件中)
/* 管道流 */
var fs = require('fs');
// 创建一个可读流
var inputStream = fs.createReadStream('./input.txt');
// 创建一个可写流
var outputStream = fs.createWriteStream('./output.txt');
// 管道读写操作
// 读取input.txt文件内容,并将内容写入到output.txt文件中
inputStream.pipe(outputStream);
console.log('程序执行完毕');
(4)链式流:通过连接输出流到另外的一个流并创建多个流操作链的机制。链式流一般用于管道操作。(大多数结合管道进行操作)
实例(压缩文件):
/* 链式流(压缩和解压文件) */
var fs = require('fs');
var zlib = require('zlib');
// 压缩input.txt文件为 input.txt.gz
fs.createReadStream('./input.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('./input.txt.gz'));
console.log('程序压缩完毕');
实例(解压文件):
/* 链式流(解压文件) */
var fs = require('fs');
var zlib = require('zlib');
// 解压input.txt.gz文件为input1.txt
fs.createReadStream('./input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('./input1.txt'))
console.log('文件解压完成')