与文件管理不同的是,文件流一般用于,大文件的操作
一、文件流的写入
1.1、主要接口方法
- 导入文件模块:
require('fs');
- 创建写入流文件 对象:
fs.createWriteStream(path[, options])
- 监听文件打开 事件:
ws.on('open', callback)
- 监听文件关闭 事件:
ws.on('close', callback)
- 文件流式写入 方法:
ws.write(chunk[, encoding][, callback])
- 文件写入完成 方法:
ws.end([chunk[, encoding]][, callback])
1.2、写入文件流完整步骤
let fs = require('fs');
// 1. 创建一个写入流
// fs.createWriteStream(path(文件路径)[, options](可选操作))
let ws = fs.createWriteStream('hello.txt', {flags: 'w', encoding: 'utf-8'})
// 2. 监听文件打开事件
ws.on('open', function() {
console.log('文件打开了')
})
// 3. 文件流式写入
ws.write('你好世界!', function(err) {
if(err) {
console.log('出错')
console.log(err)
}
});
ws.write('你好世界2!', function(err) {
if(err) {
console.log('出错')
console.log(err)
}
});
// 4. 文件写入完成
ws.end(function() {
console.log('文件写入关闭')
});
// 5. 监听文件关闭事件
ws.on('close', function() {
console.log('写入完成,关闭')
})
二、文件流的读取
2.1、主要接口方法
- 导入文件模块:
require('fs');
- 创建读取流文件 对象:
fs.createReadStream(path[, options])
- 监听文件打开 事件:
rs.on('open', callback)
- 监听文件关闭 事件:
rs.on('close', callback)
- 文件流式读取 方法:
rs.on('data', callback(chunk))
- 文件读取完成 方法:
rs.end([chunk[, encoding]][, callback])
2.2、写入文件流完整步骤
let fs = require('fs')
// 1. 创建一个读取流
// fs.createReadStream(path(文件路径)[, options](可选操作))
let rs = fs.createReadStream('hello.txt', {flags : 'r',encoding: 'utf-8'});
// 2. 监听文件打开事件
rs.on('open', function() {
console.log('文件打开了')
})
// 4. 监听文件关闭事件
rs.on('close', function() {
console.log('写入完成,关闭')
})
// 3. 文件流式读取
// 每一批数据流入完成
rs.on('data', function(chunk) {
console.log('单批数据: ' + chunk.length)
console.log(chunk)
})
2.3、与文件写入流配合
和文件写入流配合,读取一个 mp3 文件,并且写入到一个新的 mp3文件中
let fs = require('fs')
// 1. 创建一个读取流,一个写入流
let rs = fs.createReadStream('G.E.M.邓紫棋 - 喜欢你.mp3', {flags : 'r'});
let ws = fs.createWriteStream('a.mp3', {flags: 'w'})
// 2. 监听文件打开事件
rs.on('open', function() {
console.log('文件打开了')
})
// 3. 文件流式读取
// 每一批数据流入完成
rs.on('data', function(chunk) {
console.log('单批数据: ' + chunk.length)
console.log(chunk)
// 读取到每一批数据,将其写入到另一个文件中
ws.write(chunk, function(err) {
if(err) {
console.log('出错')
console.log(err)
}
});
})
// 4. 监听文件关闭事件
rs.on('close', function() {
console.log('写入完成,关闭')
// 在文件读取完毕,关闭时,关闭文件写入流
ws.end(function() {
console.log('文件写入关闭')
});
})
2.4,将以上过程封装好的方法 pipe
方法:readable.pipe(destination[, options])
使用过程:
let fs = require('fs')
// 1. 创建一个读取流,一个写入流
let rs = fs.createReadStream('G.E.M.邓紫棋 - 喜欢你.mp3', {flags : 'r'});
let ws = fs.createWriteStream('b.mp3', {flags: 'w'})
// 2. 监听文件打开事件
rs.on('open', function() {
console.log('文件打开了')
})
// 3. 使用pipe,将读取流和写入流链接在一起
rs.pipe(ws)
// 4. 监听文件关闭事件
rs.on('close', function() {
console.log('写入完成,关闭')
})