Node.js文件流
- 什么是文件流?
- 为什么要用文件流?
- 文件流的分类
什么是文件流?
首先因为 流 在文件读写里非常抽象,所以并不能明显确定。
这里打个比方说明一下(也不知道形象不):
比如说一个地方发生火灾了,消防队来灭火,消防队的水车就好比一个文件,读文件及文件流的话就好比把水运过去灭火的方式。
读文件 就类似:你拿一个桶来水车这边接水,然后 必须 等接满了再提过去灭火。如果火势很小蔓延很慢 的话,还可以用这种方法灭火(这里相对于是文件比较小的时候
文件流 就类似:火势特别大的情况(这里相对于是文件特别大的时候)这个时候你再来用桶接水,那很显然是灭不了火的。所以消防车上都配有高压水枪,水枪头对准火源,水枪尾连接到车水,然后水车里的水通过水枪流动到火灾地。(这个时候就好比用文件流的方式)
为什么要用文件流?
把 文件读取 比作上面的灭火,如果这个火灾特别大怎么办?用桶接水多久才能灭火?
因此便会有了 文件流 ,文件流就好比你直接打开水枪就能灭火,不用桶接水也不用等水接满。
文件流的分类
1.读取流
读取一个文件的内容
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./4.txt')
const read = fs.createReadStream(filename,{
// 设置读取文件的格式
encoding:'utf-8',
// 控制每次读取的字符数
highWaterMark:1
})
read.on('open',() => console.log('打开文件'))
read.on('data',chunk => console.log('读取到的部分数据:',chunk))
read.on('end',() => console.log('数据全部读取完成'))
4.txt 里面的内容为 hello world
1.写入流
向一个文件中写入要添加的数据
flags:“a” 此方法用于在文件夹后面追加 不追加的话就会覆盖掉原文件的内容
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./4.txt')
const ws = fs.createWriteStream(filename,{
encoding:'utf-8',
highWaterMark:2,
// 此方法用于在文件夹后面追加 不追加的话就会覆盖掉原文件的内容
flags:'a'
})
ws.write("123")
ws.write("222")
ws.write("333")
ws.write("444")
ws.write("555")
3.双工流
读取一个文件内容,将内容写到另一个文件中去
用法: 要读的文件 . pipe(要写入的文件)
const fs = require('fs')
const path = require('path')
const filename = path.resolve(__dirname,'./4.txt')
const ws = fs.createWriteStream('./4.txt')
const read = fs.createReadStream('./5.txt')
// 读取 ./4.txt 文件 并写入到 ./5.txt 文件中去
read.pipe(ws)