Node.js系列: 内置原生模块 fs 模块

235 阅读1分钟

与文件系统进行交互的核心模块

文件操作方法:

  • fs.readFileSync() 同步读取 - 返回文件内容
  • fs.readFile() 异步读取 - 该方法没有返回值,回调函数在读取文件成功后执行

  • fs.writeFileSync():同步写入,覆盖原内容

  • fs.writeFile():异步写入

  • fs.appendFileSync(): 同步追加写入,拼接

  • fs.appendFile(): 异步


  • fs.copyFileSync() : 同步拷贝
  • fs.copyFile(): 异步拷贝

  • fs.mkdirSync(): 同步创建目录,没有返回值
  • fs.mkdir():异步创建目录,第二个参数为回调函数

文件流式读取,写入:

  • fs.createReadStream()
  • fs.createWriteStream()

参数:

同步操作有返回值:文件读有2个参数(1,3),文件写和追加写有三个参数

  • 第一个参数为写入文件的路径或文件描述符
  • 第二个参数为写入的数据,类型为 String 或 Buffer
  • 第三个参数为 options,
    • 默认值为 null,
    • 编码encoding(默认为 utf8)、'ascii'、'base64'
    • 标识位flag(默认为 a): {flag:'r+'}
    • 权限位mode(默认为 0o666)

异步操作:没有返回值

  • 前三个参数和同步相同
  • 最后一个参数为回调函数,函数内有一个参数 err(错误),回调函数在文件追加写入数据成功后执行

例子:

const fs = require("fs");
let buf = fs.readFileSync("1.txt");
let data = fs.readFileSync("1.txt", "utf8");

console.log(buf); // <Buffer 48 65 6c 6c 6f>
console.log(data); // Hello
fs.readFile("1.txt", "utf8", (err, data) => {
   if(!err){
       console.log(data); // Hello
   }
});
fs.writeFileSync("2.txt", "Hello world");
fs.writeFile("2.txt", "Hello world", err => {
    if (!err) {
        fs.readFile("2.txt", "utf8", (err, data) => {
            console.log(data); // Hello world
        });
    }
});

fs.appendFile("3.txt", " world", err => {
    if (!err) {
        fs.readFile("3.txt", "utf8", (err, data) => {
            console.log(data); // Hello world
        });
    }
});

fs.mkdirSync("a/b/c")

fs.copyFile("3.txt", "4.txt", () => {
    fs.readFile("4.txt", "utf8", (err, data) => {
        console.log(data); // Hello world
    });
});

fs 和 Buffer的结合

通过流的形式,将一个文件的内容读取到另外一个文件 如果读取文件的时候,第二个参数不传递的话,打印出来的也是Buffer

const inputStream = fs.createReadStream('input.txt'); // 创建可读流
const outputStream = fs.createWriteStream('output.txt'); // 创建可写流

inputStream.pipe(outputStream); // 管道读写