node.js 从文件流中读写数据及管道流

读取数据

// 引入 fs 模块
const fs = require('fs');

// 创建可读流
let readStream = fs.createReadStream('index.txt');

// 保存数据
let str = ''
// 读取次数
let count = 0;

// 处理流事件 data - 当有数据可读时触发。

readStream.on('data',(chunk)=>{
    str += chunk;
    count++;
})

// end - 没有更多的数据可读时触发。
readStream.on('end',(chunk)=>{
    console.log(str)
    console.log(count);
})

// error - 在接收和写入过程中发生错误时触发。
readStream.on('error',(err)=>{
    console.log(err);
})

结果如下:

成功读取到文本内容,且文件较大时,会分次读取,这里分两次读取

写入数据

const fs = require('fs');

let data = '我是从数据库获取的数据,我要以文件流的方式保存起来
';

// 创建一个可以写入的流,写入到文件 output.txt 中
let writeStream = fs.createWriteStream('output.txt');

for(let i = 0;i < 100; i++){
    writeStream.write(data,'utf8');
}

// 标记写入完成
writeStream.end();

writeStream.on('finish',()=>{
    console.log('写入完成');
})

writeStream.on('error',()=>{
    console.log('写入失败');
})

output.txt 文件写入了 100 条数据 

注意: end() 方法 会触发 finish 方法,如果不标记 end , 则无法触发 finish 方法,所以,建议大家写入完成标记end

管道流:

针对大型文件的复制

const fs = require('fs');

// 创建一个可读流
let readStream = fs.createReadStream('index.txt');
// 创建一个可写流
let writeStream = fs.createWriteStream('output.txt');

// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readStream.pipe(writeStream);
console.log('执行完毕');
原文地址:https://www.cnblogs.com/Sky-Ice/p/9366069.html