极简 Node.js 入门 - 3.3 文件写入

极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node

本文更佳阅读体验:https://www.yuque.com/sunluyong/node/fs-write

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

fs.writeFile

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

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

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

const fs = require('fs');

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

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 的内容,而使用字符串只能把字符串内容全部写入文件

const fs = require('fs');

const data1 = Buffer.from('Hello, Node.js');
const data2 = 'Hello, Node.js';

const fd = fs.openSync('./test.txt', 'w');
console.log(fd)

fs.write(fd, data1, err => {
  if (err) throw err;
  console.log('data1 已被写入');
});

fs.write(fd, data2, err => {
  if (err) throw err;
  console.log('data2 已被写入');
});

setTimeout(() => {
  fs.close(fd, console.log);
}, 100);

fs.appendFile

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

const fs = require('fs/promises');

const data1 = Buffer.from('Hello,');
const data2 = Buffer.from(' Node.js');

fs.appendFile('./test.txt', data1)
  .then(() => {
    fs.appendFile('./test.txt', data2);
    console.log('文件内容追加完成');
  });

fs.createWriteStream

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

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


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

const fs = require('fs');

fs.createReadStream('./test.txt')
  .pipe(fs.createWriteStream('./copy.txt'));

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

posted @ 2020-08-22 10:59  谦行  阅读(370)  评论(0编辑  收藏  举报