nodejs文件流操作

nodejs里面fs文件模块算是用的非常频繁了,常用的方法也非常多,其中readFile和writeFile就是读取文件和写入文件了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const fs=require("fs")
fs.readFile('input.txt',"utf-8",(err,data)=>{
if(err){
console.log(err)
}else{
console.log("读取成功:"+data)
}
})
fs.writeFile('output.txt',"要写入的内容",err=>{
if(err){
console.log(err)
}else{
console.log("写入成功")
}
})

这样读取和写入文件的弊端在于,需要将全部的文件内容放入内存中,再进行处理,如果文件过大,就很容易耗尽内存,造成卡顿。
而文件流操作是读取一部分就处理一部分,整个过程非常平缓,不会占用更多内存。

readStream读取文件流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const fs=require("fs")

<!-- 创建一个读取流 -->
const readStream=fs.createReadStream('input.txt')
<!-- 监听文件流 事件 -->
let str="
readStream.on("data",chunk=>{
str+=chunk
})
readStream.on("end",()=>{
console.log("读取完成")
})
readStream.on("error",err=>{
console.log(err.stack)
})

writeStream写入文件流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const fs=require("fs")

<!-- 创建一个写入流 -->
const writeStream=fs.createWriteStream("output.txt")

const data="要写入的文件内容"

<!-- 以uft-8编码写入数据 -->
writeStream.write(data,"utf-8")

<!-- 标记文件末尾 -->
writeStream.end()

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

<!-- 监听失败 -->
writeStream.on("error",err=>{
console.log(err.stack)
})

pipe管道流

管道流通常用于从一个流中获取数据然后传递到另外一个流中。

1
2
3
4
5
6
7
8
9
10
11
12
const 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
7
const 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"))


上一篇
js中this原理 js中this原理
问题的由来js中一个很容易混淆的很难理解的点就是this的指向问题了,在面试环节this的出场率绝对在90%以上,所以今天来复习下this,探讨一下this的原理。在很多时候我们会看到这样的写法1234567891011121314var
2019-08-07 刘赛
下一篇
nodejs util模块之inspect nodejs util模块之inspect
nodejs中util模块也叫工具模块,其中inspect主要用来将对象转换成字符串,类似于JSON.stringify(但是这两者又不是完全一样的,JSON.stringify(),一个对象哪些属性可以序列化是JSON规范的,比如对象里的
2019-07-09