nodejs里面fs文件模块算是用的非常频繁了,常用的方法也非常多,其中readFile和writeFile就是读取文件和写入文件了。
1 | const fs=require("fs") |
这样读取和写入文件的弊端在于,需要将全部的文件内容放入内存中,再进行处理,如果文件过大,就很容易耗尽内存,造成卡顿。
而文件流操作是读取一部分就处理一部分,整个过程非常平缓,不会占用更多内存。
readStream读取文件流
1 | const fs=require("fs") |
writeStream写入文件流
1 | const fs=require("fs") |
pipe管道流
管道流通常用于从一个流中获取数据然后传递到另外一个流中。1
2
3
4
5
6
7
8
9
10
11
12const fs=require("fs")
<!-- 创建一个读取流 -->
const readStream=fs.createReadStream("input.txt")
<!-- 创建一个写入流 -->
const writeStream=fs.createWriteStream('output.txt')
<!-- 管道操作,读取input.txt里面的内容,然后写入out.txt中 -->
readStream.pipe(writeStream)
console.log("执行完成")
链式流
有的时候我们取消读取文件后,执行一定的操作处理后再写入另外一个文件,比如读取文件后合并、压缩完后写入另一个文件,这个时候使用链式流就非常方便了(和gulp里面的链式处理比较像,获取是jquery的链式操作)1
2
3
4
5
6
7const fs=require("fs")
const zlib=require("zlib")//node中用于压缩和解压的系统模块
先读取input.txt文件内容,然后压缩为input.txt.gz
fs.createReadStream("input.txt")
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream("input.txt.gz"))