Node.js-fs 文件系统API

文件系统简单来说就是通过Node来操作系统中的文件
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载


权限位 mode

因为 fs 模块需要对文件进行操作,会涉及到操作权限的问题,所以需要先清楚文件权限是什么,都有哪些权限。

文件权限表:

权限分配 文件所有者 文件所属组 其他用户
权限项 执行 执行 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1

在上面表格中,我们可以看出系统中针对三种类型进行权限分配,即文件所有者(自己)、文件所属组(家人)和其他用户(陌生人),文件操作权限又分为三种,读、写和执行,数字表示为八进制数,具备权限的八进制数分别为 421,不具备权限为 0

标识位 flag

NodeJS 中,标识位代表着对文件的操作方式,如可读、可写、即可读又可写等等,在下面用一张表来表示文件操作的标识位和其对应的含义。

Flag 描述
r 以读取模式打开文件。如果文件不存在抛出异常。
r+ 以读写模式打开文件。如果文件不存在抛出异常。
rs 以同步的方式读取文件。
rs+ 以同步的方式读取和写入文件。
w 以写入模式打开文件,如果文件不存在则创建。
wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败。
w+ 以读写模式打开文件,如果文件不存在则创建。
wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
a 以追加模式打开文件,如果文件不存在则创建。
ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
a+ 以读取追加模式打开文件,如果文件不存在则创建。
ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

上面表格就是这些标识位的具体字符和含义,但是 flag 是不经常使用的,不容易被记住,所以在下面总结了一个加速记忆的方法。

  • r:读取

  • w:写入

  • s:同步

  • +:增加相反操作

  • x:排他方式

r+w+ 的区别,当文件不存在时,r+ 不会创建文件,而会抛出异常,但 w+ 会创建文件;如果文件存在,r+ 不会自动清空文件,但 w+ 会自动把已有文件的内容清空。

文件描述符 fd

操作系统会为每个打开的文件分配一个名为文件描述符的数值标识,文件操作使用这些文件描述符来识别与追踪每个特定的文件,Window 系统使用了一个不同但概念类似的机制来追踪资源,为方便用户,NodeJS 抽象了不同操作系统间的差异,为所有打开的文件分配了数值的文件描述符。
在 NodeJS 中,每操作一个文件,文件描述符是递增的,文件描述符一般从 3 开始,因为前面有 012三个比较特殊的描述符,分别代表 process.stdin(标准输入)、process.stdout(标准输出)和 process.stderr(错误输出)。

异步和同步

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高速度更快,而且没有阻塞

文件操作的基本方法

文件操作中的基本方法都是对文件进行整体操作,即整个文件数据直接放在内存中操作,如读取、写入、拷贝和追加,由于计算机的内存容量有限,对文件操作需要考虑性能,所以这些方法只针对操作占用内存较小的文件。

1、文件的读取

(1)同步读取方法readFileSync

readFileSync(path[, options])

  • path 要读取的文件的路径

  • options 读取的选项,默认值为 null,其中有 encoding(编码,默认为 null)和 flag(标识位,默认为 r),也可直接传入 encoding

若现在有一个文件名为 1.txt,内容为 “Hello”,现在使用 readFileSync 读取。

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

(2)异步读取方法 readFile

readFile(path[, options], callback)

  • 前两个参数同上相同

  • callback回调函数,通过回调函数将读取到内容返回(err , data)

    • err 错误对象

    • data 读取到的数据,会返回一个Buffer

依然读取 1.txt 文件:

const fs = require("fs");
 
fs.readFile("1.txt", "utf8", (err, data) => {
    console.log(err); // null
    console.log(data); // Hello
});

2、文件写入

(1) 同步写入方法 writeFileSync

writeFileSync(file, data[, options])

使用同步的方式读取数据,且读取的内容通过返回值获取。

  • file 要操作的文件的路径

  • data 要写入的数据,类型为 String 或 Buffer;

  • options 默认为null 也可直接传入 encoding

    • encoding 编码,默认为 utf8

    • flag 标识位,默认为 w

    • mode 权限位,默认为 0o666

若现在有一个文件名为 2.txt,内容为 “12345”,现在使用 writeFileSync 写入。


const fs = require("fs");
 
fs.writeFileSync("2.txt", "Hello world");
let data = fs.readFileSync("2.txt", "utf8"

你可能感兴趣的:(Node.js,node.js,javascript)