与文件管理不同的是,文件流一般用于,大文件的操作

一、文件流的写入

1.1、主要接口方法

  1. 导入文件模块: require('fs');
  2. 创建写入流文件 对象:fs.createWriteStream(path[, options])
  3. 监听文件打开 事件:ws.on('open', callback)
  4. 监听文件关闭 事件:ws.on('close', callback)
  5. 文件流式写入 方法:ws.write(chunk[, encoding][, callback])
  6. 文件写入完成 方法: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、主要接口方法

  1. 导入文件模块: require('fs');
  2. 创建读取流文件 对象:fs.createReadStream(path[, options])
  3. 监听文件打开 事件:rs.on('open', callback)
  4. 监听文件关闭 事件:rs.on('close', callback)
  5. 文件流式读取 方法:rs.on('data', callback(chunk))
  6. 文件读取完成 方法: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('写入完成,关闭')

})