原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
在之前,我们讲了有关使用fs模块来读写文件,,如果读取数据的速度快于写入的数据的速度,那么就可能会造成数据的丢失,这时候我们就需要使用流来读取。
使用ReadStream来读取文件
var ReadStream=fs.createReadStream('/index.js');//创建文件读取流
ReadStream.on('open',function(){
console.log('开始读取'); //开始读取
})
ReadStream.on('data'.function(data){
console.log(data); //读取数据
})
ReadStream.on('close',function(){
console.log('结束'); //关闭流
})
ReadStream.on('error',function(){
console.log('失败') //返回错误
})
创建文件写入流
var data = '丁小柒的node';
// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
//以 utf8 编码形式写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
console.log("写入完成。");
});
writerStream.on('error', function(err){
console.log('写入出错‘);
});
console.log("程序执行完毕");
如果文件需要暂停传输,然后再继续:
ReadStream.on('data'.function(data){
console.log(data); //读取数据
})
ReadStream.pause(); //暂停data事件
ReadStream.resume(); //继续data事件
管道流:
如果我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程,毕竟水往下流。
var readerStream = fs.createReadStream('input.txt');// 创建一个可读流
var writerStream = fs.createWriteStream('output.txt');// 创建一个可写流
readerStream.pipe(writerStream);// 管道读写操作,读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
console.log("程序执行完毕");