一、什么是fs?
fs模块是Node.js的一个核心模块,专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式。异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。异步写法demo:有一个回调函数。在了解文件操作的方法之前有一些关于系统和文件的前置知识,如文件的权限位 mode 、标识位 flag 、文件描述符 fd 等,所以在了解 fs 方法的之前会先将这几个概念明确。
二、fs之权限
文件权限表:
权限分配 文件所有者 文件所属组 其他用户
权限项 读 写 执行 读 写 执行 读 写 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1
三、fs之标识
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+ 会自动把已有文件的内容清空。
四、文件操作
1、文件读取
(1)异步读取方法 readFile
异步读取方法 readFile 与 readFileSync 的前两个参数相同,最后一个参数为回调函数,函数内有两个参数 err (错误)和 data (数据),该方法没有返回值,回调函数在读取文件成功后执行。
依然读取 1.txt 文件:
异步读取 readFile
var fs=require("fs")
fs.readfile("./1.txt",(err,data)=>{
if(err) throw err
console.log(data) //1.txt里面的数据
})
(2)同步读取readFileSync
readFileSync 有两个参数:
第一个参数为读取文件的路径或文件描述符;
第二个参数为 options ,默认值为 null ,其中有 encoding (编码,默认为 null )和 flag (标识位,默认为 r ),也可直接传入 encoding ;
返回值为文件的内容,如果没有 encoding ,返回的文件内容为 Buffer,如果有按照传入的编码解析。
若现在有一个文件名为 1.txt ,内容为 “Hello”,现在使用 readFileSync 读取。
同步读取 readFileSync
const fs = require("fs");
let data = fs.readFileSync("1.txt"); //同时也可以设置编码格式 utf8
console.log(data); // Hello复制代码
2、打开文件 open
open 方法有四个参数:
path:文件的路径;
flag:标识位;
mode:权限位,默认 0o666 ;
callback:回调函数,有两个参数 err (错误)和 fd (文件描述符),打开文件后执行。
异步打开文件
var fs=require("fs")
fs.open("./1.txt","r",(err,fd)=>{
console.log(fd)
fs.open("./2.txt","r",(err,fd)=>{
console.log(fd)
})
})
3.关闭文件 close
close 方法有两个参数,第一个参数为关闭文件的文件描述符 fd ,第二参数为回调函数,回调函数有一个参数 err (错误),关闭文件后执行。
异步关闭文件
var fs=require("fs")
fs.open("./1.txt","r",(err,fd)=>{
fs.close(fd,(err)=>{
console.log("关闭成功")
})
})
4.读取文件 read
read
方法与 readFile
不同,一般针对于文件太大,无法一次性读取全部内容到缓存中或文件大小未知的情况,都是多次读取到 Buffer 中。
想了解 Buffer 可以看 NodeJS —— Buffer 解读 。
read
方法中有六个参数:
- fd:文件描述符,需要先使用
open
打开; - buffer:要将内容读取到的 Buffer;
- offset:整数,向 Buffer 写入的初始位置;
- length:整数,读取文件的长度;
- position:整数,读取文件初始位置;
- callback:回调函数,有三个参数
err
(错误),bytesRead
(实际读取的字节数),buffer
(被写入的缓存区对象),读取执行完成后执行。
下面读取一个1.txt
文件,内容为 “hello node”。
const fs = require("fs");
let buf = Buffer.alloc(6);
// 打开文件
fs.open("1.txt", "r", (err, fd) => {
// 读取文件
fs.read(fd, buf, 0, 3, 0, (err, bytesRead, buffer) => {
console.log(bytesRead);
console.log(buffer);
// 继续读取
fs.read(fd, buf, 3, 3, 3, (err, bytesRead, buffer) => {
console.log(bytesRead);
console.log(buffer);
console.log(buffer.toString());
});
});
});
5.同步磁盘缓存
fsync 方法有两个参数,第一个参数为文件描述符 fd ,第二个参数为回调函数,回调函数中有一个参数 err (错误),在同步磁盘缓存后执行。
在使用 write 方法向文件写入数据时,由于不是一次性写入,所以最后一次写入在关闭文件之前应先同步磁盘缓存, fsync 方法将在后面配合 write 一起使用。
后续会继续完善,如果感觉有帮助请给予一个宝贵的赞!或者给小编一个赞赏!!
网友评论