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

文件流放入response中 文件流 js_数据

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")

文件流放入response中 文件流 js_文件流放入response中_02


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)