fs-Api 整理
const fs = require('fs')
权限位 mode
因为 fs 模块需要对文件进行操作,会涉及到操作权限的问题,所以需要先清楚文件权限是什么,都有哪些权限。
文件权限表:
| 权限分配 | 文件所有者 | 文件所属组 | 其他用户 |
|---|---|---|---|
| 权限项 | 读 写 执行 | 读 写 执行 | 读 写 执行 |
| 字符表示 | r w x | r w x | r w x |
| 数字表示 | 4 2 1 | 4 2 1 | 4 2 1 |
文件操作权限又分为三种,读、写和执行,数字表示为八进制数,具备权限的八进制数分别为 4 、2、1,不具备权限为 0。
我们可以随便在一个目录中打开 Git,使用 Linux 命令 ls -al 来查目录中文件和文件夹的权限位
drwxr-xr-x 1 yonghu 197121 0 Jun 28 14:41 core
-rw-r--r-- 1 caozuozhe 197121 293 Jun 23 17:44 index.md
在上面的目录信息当中,很容易看出用户名、创建时间和文件名等信息,但最重要的是开头第一项(十位的字符)。 第一位代表是文件还是文件夹,d 开头代表文件夹,- 开头的代表文件,而后面九位就代表当前用户、用户所属组和其他用户的权限位,按每三位划分,分别代表读(r)、写(w)和执行(x),- 代表没有当前位对应的权限。
权限参数 mode 主要针对 Linux 和 Unix 操作系统,Window 的权限默认是可读、可写、不可执行,所以权限位数字表示为 0o666,转换十进制表示为 438。 注:0o666是八进制
标识位 flag
NodeJS 中,标识位代表着对文件的操作方式,如可读、可写、即可读又可写等等,在下面用一张表来表示文件操作的标识位和其对应的含义。
| 符号 | 含义 |
|---|---|
| r | 读取文件,如果文件不存在则抛出异常。 |
| r+ | 读取并写入文件,如果文件不存在则抛出异常。 |
| rs | 读取并写入文件,指示操作系统绕开本地文件系统缓存。 |
| w | 写入文件,文件不存在会被创建,存在则清空后写入。 |
| wx | 写入文件,排它方式打开。 |
| w+ | 读取并写入文件,文件不存在则创建文件,存在则清空后写入。 |
| wx+ | 和 w+ 类似,排他方式打开。 |
| a | 追加写入,文件不存在则创建文件。 |
| ax | 与 a 类似,排他方式打开。 |
| a+ | 读取并追加写入,不存在则创建。 |
| ax+ | 与 a+ 类似,排他方式打开。 |
- r:读取
- w:写入
- s:同步
- +:增加相反操作
- x:排他方式
r+ 和 w+ 的区别,当文件不存在时,r+ 不会创建文件,而会抛出异常,但 w+ 会创建文件;如果文件存在,r+ 不会自动清空文件,但 w+ 会自动把已有文件的内容清空。
fs.readFile 异步读取
fs.readFile(path[, options], callback)
path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
options <Object> | <string>
encoding <string> | <null> 默认值: null
flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'r'。
signal <AbortSignal> 允许中止正在进行的读取文件
callback <Function>
err <Error> | <AggregateError>
data <string> | <Buffer>
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data.toString());
});
fs.readFile(path.resolve('data1.txt'), 'utf-8', (err, data) => {
console.log(err)
if (!null) {
console.log(data)
}
})
fs.writeFile
fs.writeFile(file, data[, options], callback)
file <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
data <string> | <Buffer> | <TypedArray> | <DataView> | <Object>
options <Object> | <string>
encoding <string> | <null> 默认值: 'utf8'
mode <integer> 默认值: 0o666
flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'w'。
signal <AbortSignal> 允许中止正在进行的写入文件
callback <Function>
err <Error> | <AggregateError>
当 file 是文件名时,将数据异步地写入文件,如果文件已存在则替换该文件。 data 可以是字符串或缓冲区。 当 file 是文件描述符时,其行为类似于直接调用 fs.write()(推荐)。 如果 data 是缓冲区,则忽略 encoding 选项。 如果 data 是普通的对象,则它必须具有自有的(不是继承的)toString 函数属性。
fs.writeFile('data.txt', '123', {
mode: 438,
flag: 'w+',
encoding: 'utf-8'
}, (err) => {
if (!err) {
fs.readFile('data.txt', 'utf-8', (err, data) => {
console.log(data)
})
}
})
//种植写入的方法
const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
// 当请求中止时 - 使用 AbortError 调用回调
});
// 当应该中止请求时
controller.abort();