写入流
const fs = require('fs');
let str = '';
for(let i = 0; i < 500; i++){
str += '这是一条字符串数据,已经被保存了\n';
}
let writeStream = fs.createWriteStream('../data/outPut.txt',{
// flags: 'r+',
// start: 7500
}
);
// 此时的写入也是一点一点的写入的
writeStream.write(str);
// 使用 utf8 编码写入数据
// writerStream.write(str, 'UTF8');
// 监听写入时的报错
writerStream.on('error', function (err) {
console.log(err.stack);
});
// 标记写入完成
writeStream.end();
// 如果不标记写入完成就无法监听finish状态,就算写入完成也无法监听到finish状态
writeStream.on('finish',()=>{
console.log('写入完成');
});
读取流
const fs = require('fs');
let readStream = fs.createReadStream('../data/outPut.txt');
let count = 0;
let str = '';
// 设置编码为 utf8。
// readerStream.setEncoding('UTF8');
// 如果文件内容太大就会分为多次读取,监听data会一直不断的读取文件中的所有内容,直到所有内容都被读取完为止
readStream.on('data',(data)=>{
str+=data;
count++;
})
// 监听流读取结束
readStream.on('end',()=>{
console.log(str);
console.log(count);
})
// 监听流读取出错
readStream.on('error',(err)=>{
console.log(err);
})
管道流
主要用来复制大文件,可以用来复制图片,压缩包
const fs = require('fs');
let read = fs.createReadStream('../Pictures.rar');
let write = fs.createWriteStream('../data/Pictures.zip');
read.pipe(write);
链式流
文件压缩和解压
# 创建文件压缩。
const fs = require("fs");
const zlib = require('zlib'); // 引入用于压缩文件的模块
// 压缩 input.txt 文件为 input.txt.rar
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.rar')); // 这里的input最好带上扩展名.txt,否则解压出来的文件没有扩展名
# 文件解压。
var fs = require("fs");
var zlib = require('zlib');
// 解压 input.txt.rar 文件为 input.txt
fs.createReadStream('input.txt.rar')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));