Node系列-fs
1.0 模块介绍
fs文件模块(File System)是Node的内置核心模块之一,代码中可以通过var fs = require("fs")
直接加载和使用,该模块提供了操作文件系统的诸多API,且所有方法均提供了同步和异步操作两个版本。
1 | wendingding$ node |
在该模块中,所有的文件操作都提供了同步
和异步
两种方法(譬如:readFile
和readFileSync
方法)。这些方法在使用的时候,其使用方式和参数情况基本都是一致的。
如果是异步方法,那么其语法形式总是为function (err,callback)
,最后一个参数代表操作完成的回调函数,第一个参数通常是操作错误的异常(如果操作成功,该参数的值为null
或undefined
),需注意异步方法不能保证执行顺序,如果对多个异步任务的执行顺序有要求,那么应该把后面的任务写在前面任务的回调函数中。
如果是同步方法,那么任何异常都会立即抛出,可以使用try/catch
结构来处理异常。同步方法总是按顺序从上向下执行,是阻塞的。
1 | //001 导入内置模块 |
代码说明 上面给出了同步和异步方法使用的简单示例,代码中首先导入了fs模块,然后在当前目录中使用同步的方法(appendFileSync
)来创建Hi.text
文件并写入数据,随后调用异步方法(rename
)来对文件执行重命名操作,继而打印(stat
)该文件的信息。下面列出示例代码的执行细节。
1 | wendingding$ node app.js |
2.0 核心方法
fs文件模块(File System)中提供的方法很多,在具体介绍之前,为方便阅读我先简单列出这些方法并对它们进行功能性的区分。
1 | 001 读取和写入文件 |
readFile 和 readFileSync
作用 异步(同步
)读取文件的内容。
语法 fs.readFile( path ,[ options ], callback ) | fs.readFileSync( path ,[ options ])
参数
- path (
string | Buffer | URL | integer类型
) 指定文件名或文件描述符。 - options (
Object | string类型
) 指定编码和处理文件系统的flag值
。 - callBack (
function类型
)执行完的回调函数(err, data
),其中data是文件的内容。
1 | 001 文件系统的flag |
writeFile 和 writeFileSync
作用 异步(同步
)写入文件。
语法 fs.writeFile(file,data,[ options ],callback) | fs.writeFileSync(file,data,[ options])
参数
- file (
string | Buffer | URL | integer类型
) 指定完整路径的文件名或文件描述符。 - data (
string | Buffer | TypedArray | DataView类型
) 指定需要写入的内容。 - options (
Object | string类型
) 配置对象,可选项有encoding、mode和flag
。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
示例
1 | //备注:readAndWrite.js文件内容 |
说明
1 | 001 方法说明 |
open 和 openSync
作用 异步(同步
)打开文件。
语法 fs.open( path, flags , [ mode ], callback ) | fs.openSync( path, flags , [ mode ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - flags (
integer类型
) 指定对文件的操作,具体取值参考文件系统的flag
值。 - mode (
integer类型
) 指定文件的模式,仅在创建时有效(默认可读可写)。 - callback (
Function类型
) 执行完毕的回调函数(err
,fd
)。
close 和 closeSync
作用 异步(同步
)关闭文件。
语法 fs.close( fd, callback ) | fs.closeSync( fd )
参数
- fd (
integer类型
) 指定的文件描述符。 - callback (
Function类型
) 执行完毕的回调函数(err
,fd
),参数值为错误对象。
**read 和 readSync ** write 和 writeSync
1 | //同步 | 异步读取文件的内容。 |
参数
- fd (
integer类型
) 通常为open方法回调中返回的文件描述符。 - buffer (
Buffer | TypedArray | DataView类型
) 指定将文件数据读取到哪个缓存区。 - offset (
integer类型
) 写入数据的开始位置(字节单位)。 - length (
integer类型
) 指定从文件读取的字节数。 - position (
integer类型
) 指定读取文件时的开始位置。 - callback (
Function类型
) 回调函数(err
,bytes(Read | Written)
,buffer
)。
示例
1 | //备注:openAndClose.js 文件的内容 |
appendFile 和 appendFileSync
作用 异步(同步
)追加数据到指定文件,如果文件不存在那么就先创建。
语法fs.appendFileSync(path, data, [options])
fs.appendFile(path, data, [options], callback)
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - data (
string | Buffer类型
) 追加的具体数据。 - options (
Object | string类型
) 配置encoding、flag和mode
等字段。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
示例
1 | var fs = require("fs"); |
② 目录操作
**mkdir 和 mkdirSync**作用 异步(同步
)创建文件夹(目录)。
语法 fs.mkdir( path , [ options ], callback ) | fs.mkdirSync( path , [ options ] )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
Object | integer类型
) 配置选项有recursive
(是否创建父目录 10+)和mode
。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
readdir 和 readSync
作用 异步(同步
)读取文件夹(目录)。
语法 fs.readdir( path , [ options ] , callback ) | fs.readdirSync( path , [ options ] )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
Object | integer类型
) 配置选项有encoding
和withFileTypes
。 - callBack (
function类型
)执行完的回调函数(err
,files
),表示错误对象和目录数组。
1 | Options配置项说明 |
rmdir 和 rmdirSync
作用 异步(同步
)移除文件夹(目录)。
语法 fs.rmdir( path , callback ) | fs.rmdirSync( path )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - callback (
function类型
)执行完的回调函数(err
),表示错误对象。
示例
1 | //备注:file.js文件内容 |
access 和 accessSync
作用 异步(同步
)检查指定文件或目录的用户权限。
语法 fs.access( path, [ mode ], callback ) | fs.accessSync( path , [ mode ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - callBack (
function类型
)执行检查完成的回调函数,如果失败则唯一的error参数有值。 - mode (
integer类型
) 默认值为fs.constants.F_OK
要执行的可访问性检查。
1 | 001 文件的可访问性常量 |
stat 和 statSync
作用 异步(同步
)查看文件的属性。
语法 fs.stat( path ,[ options ], callback) | fs.statSync( path )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
对象类型
)配置项bigint(布尔类型值)控制数值是否为 bigint 型。 - callback (
function类型
)回调函数(err
,stats
),stats
保存文件信息对象。
示例
1 | //备注:test.js 文件内容 |
在上面代码中异步方法回调函数中的Info
和同步方法的返回值fileInfo
都是fs.Stats
类型对象。
fs.Stats
对象核心成员
mode 当前文件的权限标识。
nlink 当前文件的硬链接数量。
size 当前文件的大小(字节数)。
atime 当前文件的访问时间。
mtime 当前文件的修改时间。
ctime 最后改变文件状态的时间。
birthtime 创建文件的时间。
isFile() 是否是一个文件。
isDirectory() 是否是一个目录。
isSymbolicLink() 是否是符号链接文件。
fstat 和 fstatSync
作用 异步(同步
)查看文件的属性。
语法 fs.fstat(fd ,[ options ], callback) | fs.fstatSync(fd ,[ options ])
参数
- fd (
integer类型
) 使用open方法打开后返回的文件描述符。 - options (
对象类型
)配置项bigint(布尔类型值)控制数值是否为长整型。 - callback (
function类型
)回调函数(err
,stats
),stats
保存文件信息对象。
realpath 和 realpathSync
作用 异步(同步
)计算文件路径,解析 .、.. 与符号链接。
语法 fs.realpath(path ,[ options ], callback) | fs.realpathSync(path ,[ options ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
对象类型
)配置项encoding设置字符编码(默认为utf8
)。 - callback (
function类型
)回调函数(err
,resolvedPath
),resolvedPath
保存完整路径。
示例
1 | //备注:fileInfo.js文件的内容 |
rename 和 renameSync
作用 异步(同步
)对文件进行重命名操作。
语法 fs.rename( oldPath, newPath, callback ) | fs.renameSync( oldPath, newPath )
参数
- oldPath (
string | Buffer | URL类型
)原来的文件全路径。 - newPath (
string | Buffer | URL类型
)目标文件全路径名称。 - callback (
function类型
)回调函数(err
),若文件已存在则覆盖。
示例
1 | //备注:rename.js文件的内容 |
