「这是我参与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; - 第三个参数为回调函数,函数内有两个参数
err和data依然是假如有一个名为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 有时间的再整理~