(一)简单文件读取
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)
四行代码搞定,读出来直接写入