看完文件读取再看文件写入非常简单,两者的操作几乎一一对应

fs.writeFile

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

  1. file:文件名或文件描述符
  2. data:常用的主要是 string 和 buffer
  3. callback(err)

file 是文件名时,则异步地写入数据到文件,如果文件已存在,则覆盖文件内容

  1. const fs = require('fs');
  2. const data = Buffer.from('Hello, Node.js');
  3. fs.writeFile('./test.txt', data, err => {
  4. if (err) throw err;
  5. console.log('文件已被保存');
  6. });

fs.write

fs.write 有两种重载

  1. fs.write(fd, buffer[, offset[, length[, position]]], callback):参数含义和 fs.read 几乎相同
  2. fs.write(fd, string[, position[, encoding]], callback):只能把字符串内容全部写入文件

两个的区别就是使用 buffer 可以只写入 buffer 中 offset ~ length + offset 的内容,而使用字符串只能把字符串内容全部写入文件

  1. const fs = require('fs');
  2. const data1 = Buffer.from('Hello, Node.js');
  3. const data2 = 'Hello, Node.js';
  4. const fd = fs.openSync('./test.txt', 'w');
  5. console.log(fd)
  6. fs.write(fd, data1, err => {
  7. if (err) throw err;
  8. console.log('data1 已被写入');
  9. });
  10. fs.write(fd, data2, err => {
  11. if (err) throw err;
  12. console.log('data2 已被写入');
  13. });
  14. setTimeout(() => {
  15. fs.close(fd, console.log);
  16. }, 100);

fs.appendFile

fs.appendFile(path, data[, options], callback) 将数据追加到文件尾部,如果文件不存在则创建该文件

  1. const fs = require('fs/promises');
  2. const data1 = Buffer.from('Hello,');
  3. const data2 = Buffer.from(' Node.js');
  4. fs.appendFile('./test.txt', data1)
  5. .then(() => {
  6. fs.appendFile('./test.txt', data2);
  7. console.log('文件内容追加完成');
  8. });

fs.createWriteStream

fs.createWriteStream(path[, options])用来创建一个可写的文件流,options 和 fs.createReadStream 几乎相同
options(比较常用的有)

  • fd: 默认值 null,如果指定了 fd,则会忽略 path 参数,使用指定的文件描述符(不会再次触发 open 事件)
  • mode:默认值 0o666
  • autoClose: 默认值: true,当 ‘error’ 或 ‘finish’ 事件时,文件描述符会被自动地关闭
  • start: 开始写入文件的位置,不设置默认覆盖

把一个可读流内容写到可写流非常简单

  1. const fs = require('fs');
  2. fs.createReadStream('./test.txt')
  3. .pipe(fs.createWriteStream('./copy.txt'));

关于流的介绍和更多使用在 Buffer 和 Stream 章节会有详细介绍