fs 基本操作

1,133 阅读4分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

前言

本文主要是为了巩固下fs的基本操作

正文

文件读取

同步文件读取 readFileSync

readFileSync主要有两个参数, 且有返回值:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数为 options[<Object> | <string>],默认值为 null,其中有 encoding(编码,默认为 null)和 flag(标识位,默认为 r),也可直接传入 encoding;
  • 返回值为文件的内容,如果没有 encoding,返回的文件内容为 Buffer,如果有按照传入的编码解析。 假如有一个名为 readme.md 的文件,其内容为 前言, 那么使用方式如下:
const fs = require("fs");

let buf = fs.readFileSync("readme.md");
let data = fs.readFileSync("log.txt", "utf8");

console.log(buf); // <Buffer ...>
console.log(data); // 前言

异步文件读取 readFile

readFileSync主要有三个参数,且无返回值:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数为 options[<Object> | <string>],默认值为 null,其中有 encoding(编码,默认为 null)和 flag(标识位,默认为 r),也可直接传入 encoding;
  • 第三个参数为回调函数,函数内有两个参数errdata 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 那么使用方式如下:
const fs = require("fs");

fs.readFile("readme.md", "utf8", (err, data) => {
    console.log(err) // null
    console.log(data) // 前言
})

文件写入

同步写入方法 writeFileSync

writeFileSync 主要有三个参数:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 data[<string> | <Buffer>] 为写入的数据
  • 第三个参数 option[<string> | <Object>] , 其中默认值为null, 其中encoding 默认为 utf8, 也可以直接传 utf8 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用writeFileSync写入使用方式如下:
const fs = require("fs");

fs.writeFileSync("readme.md", "结语", "utf8")
const data = fs.readFileSync("readme.md", "utf8")

console.log(data) // 结语

异步写入方法 writeFile

writeFile 有三个参数:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 data[<string> | <Buffer>] 为写入的数据
  • 第三个参数为回调函数 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用writeFile写入使用方式如下:
const fs = require("fs");
fs.writeFile("readme.md", "结语", err => {
    if(!err) {
        fs.readFile("readme.md", "utf8", (err, data) => {
            console.log(data) // 结语
        })
    }
})

文件追加写入 appendFileSync

appendFileSync 有三个参数:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 data[<string> | <Buffer>] 为写入的数据
  • 第三个参数 option[<string> | <Object>] , 其中默认值为null, 其中encoding 默认为 utf8, 也可以直接传 utf8 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用appendFileSync写入使用方式如下:
const fs = require("fs");
fs.appendFileSync("readme.md", "结语", "utf8")
const data = fs.readFileSync("readme.md", "utf8")

console.log(data) // 前言结语

异步文件追加写入 appendFile

appendFile 有三个参数:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 data[<string> | <Buffer>] 为写入的数据
  • 第三个参数为回调函数 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用writeFile写入使用方式如下:
const fs = require("fs");
fs.appendFile("readme.md", "结语", err => {
    if(!err) {
        fs.readFile("readme.md", "utf8", (err, data) => {
            console.log(data) // 前言结语
        })
    }
})

文件拷贝

同步拷贝方法 copyFileSync

copyFileSync 有两个参数:

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 path[<string>] 为读取文件的路径或文件描述符; 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用copyFileSync拷贝到 readme2.md中,使用方式如下:
const fs = require("fs");
fs.copyFileSync("readme.md", "readme2.md")
const data = fs.readFileSync("readme2.md", "utf8")
console.log("data") // 前言

异步拷贝方法 copyFile

copyFile 有三个参数

  • 第一个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第二个参数 path[<string>] 为读取文件的路径或文件描述符;
  • 第三个参数为回调函数 依然是假如有一个名为 readme.md 的文件,其内容为 前言, 现在使用copyFile拷贝到 readme2.md中,使用方式如下:
const fs = require("fs");
fs.copyFile("readme.md", "readme2.md", err => {
    if(!err) {
        fs.readFile("readme2.md", "utf8", (err, data) => {
            console.log(data) // 前言
        })
    }
})

模拟同步、异步拷贝文件

readFileSync 和 writeFileSync 可以模拟实现同步拷贝写入文件,使用 readFile 和 writeFile 可以模拟实现异步写入拷贝文件

依然是假如有一个名为 readme.md 的文件,其内容为 前言, writeFileSync和readFileSync使用方式如下:

const fs = require("fs");
// 同步拷贝
const copy = (src, tsrc) => {
    let data = fs.readFileSync(src);
    fs.writeFileSync(tsrc, data);
}
// 拷贝
copy("readme.md", "readme2.md");
const data = fs.readFileSync("readme2.md", "utf8");
console.log(data); // 前言

依然是假如有一个名为 readme.md 的文件,其内容为 前言, writeFile和readFile使用方式如下:

const fs = require("fs");
// 异步拷贝
const copy = (src, tsrc, callback) => {
    fs.readFile(src, (err, data) => {
        if(!err) fs.writeFile(tsrc, data, callback);
    })
}
// 拷贝
copy("readme.md", "readme2.md", () => {
    fs.readFile("readme2.md", "utf8", (err, data) => {
        console.log(data) // 前言
    })
});

结语

本章主要记录下基本的操作,关于高级操作 open/close/read/fsync/write/copy 有时间的再整理~