(六)文件读取

(一)简单文件读取

1. 代码:

var fs = require('fs')
// fs.readFile 读文件
// 第一个参数:要读取的文件路径
// 第二个参数:读出来的数据 注意是个Buffer
fs.readFile('./hello.js', (err, data) => {
  if (err) {
    console.log(err)
  } else {
    console.log(data)
  }
})

输出:

<Buffer e6 88 91 e6 98 af 31 e6 88 91 e6 98 af 32 e6 88 91 e6 98 af 33 e6 88 91 e6 98 af 34 e6 88 91 e6 98 af 35>

如果确定是文本,想要查看 data.toString()

我是1我是2我是3我是4我是5

输出Buffer格式的好处是,可以读 图片、音频、视频等其他格式的文件,因为这些文件都是使用二进制存储的

2. 复制图片小例子

var fs = require('fs')
// fs.readFile 读文件
// 第一个参数:要读取的文件路径
// 第二个参数:读出来的数据 注意是个Buffer
fs.readFile('./actor.jpg', (err, data) => {
  if (err) {
    console.log(err)
  } else {
    // 读出来 写进去
    fs.writeFile('./copy.jpg', data, (error) => {
      if (error) {
        console.log(error)
        return
      }
      console.log('复制成功~')
    })
  }
})

复制的图片名称就叫 copy.jpg 

(二) 流式文件读取

流式文件读取也适用于一些比较大的文件,可以分多次读取到内存中,有助于性能

代码:

var fs = require('fs')

var rs = fs.createReadStream('./hello.js')
// 监听流的开启和关闭
rs.once('open', function () {
  console.log('流打开啦')
})
rs.once('once', function () {
  console.log('流关闭啦')
})
// 监听data流事件没error
rs.on('data', function (data) {
  console.log(data)
  console.log(data.length) // 每次读取多少内存
})

可以看到读取 pdf 这个大文件的时候是分批次读的,每次只读取65536字节

读完写入,已复制pdf为例子

var fs = require('fs')

var rs = fs.createReadStream('./test.pdf')
var ws = fs.createWriteStream('./copy.pdf')
// 监听流的开启和关闭
rs.once('open', function () {
  console.log('流打开啦')
})
rs.once('once', function () {
  ws.end()
  console.log('流关闭啦')
})
// 监听data流事件没error
rs.on('data', function (data) {
  console.log(data)
  console.log(data.length) // 每次读取多少内存
  ws.write(data)
})

 

不过这样写有点麻烦,简单写法,直接拿管子连起来

var fs = require('fs')
var rs = fs.createReadStream('./test.pdf')
var ws = fs.createWriteStream('./pipe.pdf')
rs.pipe(ws)

 四行代码搞定,读出来直接写入

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值