上篇介绍了关于文件的删除、复制、重命名等操作,本篇将介绍文件的流操作。流是对大型数据文件管理、传输高效地处理方式。
/**
* 文件流操作
*/
const fs = require("fs");
const path = require("path");
const zlib = require("zlib");
var targetFilePath = path.join(__dirname,"HelloWorld.txt");
var targetOutPath = path.join(__dirname,"input.txt");
//压缩文件路径
var targetZipPath = path.join(__dirname,"HelloWorld.txt.gz");
var data = "";
//-----------一般的文件流操作------------------------
//文件读取流
var readSteam = fs.createReadStream(targetFilePath);
readSteam.setEncoding("UTF8");
readSteam.on("data",(chunk)=>{
data += chunk;
});
//读取完成
readSteam.on("end",()=>{
console.log("文件读取完成内容:",data);
});
readSteam.on("error",(err)=>{
console.log("文件读取错误:",err);
});
//文件写入流
var writeStream = fs.createWriteStream(targetOutPath);
writeStream.on("finish",()=>{
console.log("文件写入完成!");
});
writeStream.on("error",(err)=>{
console.log("文件写入错误:",err);
});
//从源文件读取时,将读取的数据写入到目标文件
readSteam.pipe(writeStream);
//-------文件流的链式操作------------
//1.文件压缩处理
fs.createReadStream(targetFilePath).pipe(zlib.createGzip()).pipe(fs.createWriteStream(targetZipPath));
//2.文件解压处理
fs.createReadStream(targetZipPath).pipe(zlib.createGunzip()).pipe(fs.createWriteStream(targetFilePath));
【注意】可以通过屏蔽注释某些代码接口,测试各个接口,查看它们的执结果。
Helloworld.txt文件内容写入到新文件input.txt中。
文件HelloWorld压缩成Helloworld.txt.gz文件
文件解压缩效果图(略)。使用流接口处理文件,是比较推荐的方式。