Skip to content

文件系统 fs

在 Node 中有一个文件系统,可以对计算机中的文件进行增删改查操作。fs 模块是 Node 的核心模块,使用的时候,无需下载,直接引入。

简单文件写

fs.writeFile(file, data[, options], callback)

  • file 要写入的文件路径 + 文件名
  • data 要写入的数据
  • options 可选参数
    • encoding 设置文件的编码方式,默认为 utf8
    • mode 设置文件的操作权限,默认为 0o666
      • 0o111 文件可被执行 (几乎不用)
      • 0o222 文件可被写入
      • 0o444 文件可被读取
    • flag 设置对文件执行的操作,默认为 w
      • a 追加
      • w 写入
  • callback 回调函数
javascript
// 1. 引入内置的 fs 模块
const fs = require('fs'); // fs.writeFile(file, data, [options], callback)
// 2. 调用 writeFile 方法
fs.writeFile(
  __dirname + '/demo.txt',
  '一段文本',
  {
    encoding: utf8,
    mode: 0o666, // 设置文件的操作权限
    flag: 'w'
  },
  (err) => {
    if (err) {
      console.log('文件写入失败', err);
    }
    else {
      console.log('文件写入成功');
    }
	}
);

流式文件写

fs.createWriteStream(path[, options]) 创建可写流

  • path 要写入的文件路径 + 文件名
  • options 可选参数
    • flags 设置对文件执行的操作,默认为 w
    • encoding 设置文件的编码方式,默认为 utf8
    • mode 设置文件的操作权限,默认为 0o666
    • fd 文件统一标识符
    • autoClose 自动关闭文件,默认为 true
    • emitClose 强制关闭文件,默认为 false
    • start 写入文件的起始位置 (偏移量)
javascript
// 1. 引入内置的 fs 模块
const fs = require('fs');
// 2. 创建一个可写流
const ws = fs.createWriteStream(
  __dirname + '/demo.txt'
);

// 3. 只要用到了流,就必须监测流的状态
ws.on('open', () => {
  console.log('可写流打开了');
});
ws.on('close', () => {
  console.log('可写流关闭了');
});

// 4. 使用可写流写入数据
ws.write('美女\n');
ws.write('霉女?\n');
ws.write('到底是哪一个?\n');
ws.close(); // 在 Node 的 v8 版本中,要用 end 方法关闭流

简单文件读

fs.readFile(path[, options], callback)

  • path 要读取文件的路径+文件名+后缀
  • options 可选参数
  • callback 回调函数
javascript
fs.readFile(
  __dirname + '/test.mp4',
  (err, data) => {
    if (err) {
      console.log(err);
    }
    else {
      console.log(data); // 读取出来的东西是 Buffer,因为用户存储的不一定是纯文本
    }
});

流式文件读

fs.createReadStream(path[, options])

  • path 要读取的文件路径 + 文件名
  • options 可选参数
    • flags 设置对文件执行的操作,默认为 w
    • encoding 设置文件的编码方式,默认为 utf8
    • mode 设置文件的操作权限,默认为 0o666
    • fd 文件统一标识符
    • autoClose 自动关闭文件,默认为 true
    • emitClose 强制关闭文件,默认为 false
    • start 写入文件的起始位置 (偏移量)
    • end
    • highWaterMark 控制每次读取文件的大小,默认值是 64 KB
javascript
// 1. 引入内置的 fs 模块
const fs = require('fs');

// 2. 创建一个可读流
const rs = fs.createReadStream(
  __dirname + '/music.mp3',
  {
    highWaterMark: 10 * 1024 * 1024, // 10 MB
  }
);

// 3. 只要用到了流,就必须监测流的状态
rs.on('open',function () {
  console.log('可读流打开了')
});
rs.on('close',function () {
  console.log('可读流关闭了')
  ws.close() // 关闭可写流
});

// 4. 给可读流绑定 data 事件,触发可读流自动读取文件
rs.on('data', (data) => {
  console.log(data); // 很多个 Buffer
  console.log(data.length); // 65536 是每个 Buffer 的长度;每次读取 64 KB 的内容
  ws.write(data); // 向另一个文件写入读取到的 Buffer
});