fs.readFile / writeFile(整文件读写),追加内容用 fs.readFile / writeFile(整文件读写),追加内容用 fs.readFile / writeFile(整文件读写),追加内容用
Node.js 词条目录
前端Wiki/Node.js/进阶/文件系统 fs

读写文件

读写文件用 fs.readFile / writeFile(整文件读写),追加内容用 fs.appendFile。第二个参数传 'utf8' 拿到字符串,不传拿到 Buffer(适合二进制文件)。

writeFile 默认会覆盖原文件,传 {flag: 'a'} 可改为追加。读写大文件不要用 readFile(一次性全读进内存),改用后面会讲的 stream 流。

  • readFile('utf8') 得到字符串,省略编码得到 Buffer 二进制
  • writeFile 默认覆盖;{flag:"a"} 追加;目录不存在要先 mkdir
  • 写文件前建议 fs.mkdir(dirname, {recursive: true}) 保证目录存在
JS
const fs = require('fs');
const fsp = require('fs').promises;

// 写入(默认覆盖)
fsp.writeFile('./tmp/log.txt', '第一行\n')
  .then(() => console.log('写入成功'));

// 追加:flag: 'a'
fsp.appendFile('./tmp/log.txt', '第二行\n').catch(console.error);

// 读 JSON 配置的标准姿势
async function loadConfig(file) {
  try {
    const raw = await fsp.readFile(file, 'utf8');
    return JSON.parse(raw);
  } catch (err) {
    if (err.code === 'ENOENT') return {};   // 文件不存在返回默认值
    throw err;
  }
}
loadConfig('./tmp/config.json').then(cfg => console.log(cfg));
本节要点readFile/writeFile 搞定小文件读写;utf8 拿字符串、省略拿 Buffer;大文件交给流。