fs模块概述
fs
是file system
的缩写。其为Node.js
的核心模块之一,用于对文件系统进行操作。它提供了丰富的函数,可对文件进行读取、写入、复制和删除操作,同时也支持对目录进行创建、遍历和修改等操作。
文件操作
文件写入操作
文件写入即将数据保存至文件中,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
write | 异步写入 |
writeSync | 异步写入 |
writeFile | 异步写入 |
writeFileSync | 同步写入 |
appendFile | 异步追加写入 |
appendFileSync | 同步追加写入 |
createWriteStream | 流式写入 |
write 异步写入
Node.js
中提供了三种write
异步写入的函数:
fs.write(fd, buffer[, options], callback)
参数说明:
- fd 文件描述符
- buffer 指定从缓冲区中读取写入到目标文件中的内容
- options 参数
- offset 指定缓冲区中开始读取内容的位置(以字节为单位)。默认为 0
- length 指定在缓冲区中读取的字节数。默认值为buffer.byteLength - offset
- position 指定目标文件开始写入的位置(以字节为单位)
- callback
- err 错误对象。若写入失败时,会传入错误对象;写入成功,会传入 null
- writeBytes 写入的字节数
- buffer 写入的内容存放的缓冲区对象
fs.write(fd, buffer, offset[, length[, position]], callback)
参数说明:
- fd 文件描述符
- buffer 指定从缓冲区中读取写入到目标文件中的内容
- offset 指定缓冲区中开始读取内容的位置(以字节为单位)。默认为 0
- length 指定在缓冲区中读取的字节数。默认值为buffer.byteLength - offset
- position 指定目标文件开始写入的位置(以字节为单位)
- callback
- err 错误对象。若写入失败时,会传入错误对象;写入成功,会传入 null
- writeBytes 写入的字节数
- buffer 写入的内容存放的缓冲区对象
fs.write(fd, string[, position[, encoding]], callback)
参数说明:
- fd 文件描述符
- string 待写入的内容
- position 指定目标文件开始写入的位置(以字节为单位)
- encoding 编码方式。默认值为 utf8
- callback
- err 错误对象。若写入失败时,会传入错误对象;写入成功,会传入 null
- writeBytes 写入的字节数
- buffer 写入的内容存放的缓冲区对象
const fs = require('fs')
fs.open('./fs_file.txt', 'r+', (err, fd) => {
if (err) {
return console.error("打开文件失败:" + err.message)
}
// 异步写入
fs.write(fd, "烹羊宰牛且为乐,会须一饮三百杯。", 10, (err, writeBytes, buffer) => {
if (err) {
return console.error("文件写入失败:" + err.message)
}
console.log("成功写入字节数:" + writeBytes)
console.log("成功写入文件内容:" + buffer.toString())
})
})
console.log("主线程执行完毕")
write 同步写入
Node.js
中提供了三种write
异步写入的函数:
fs.write(fd, buffer[, options]) // 返回写入字节数
参数说明:
- fd 文件描述符
- buffer 指定从缓冲区中读取写入到目标文件中的内容
- options 参数
- offset 指定缓冲区中开始读取内容的位置(以字节为单位)。默认为 0
- length 指定在缓冲区中读取的字节数。默认值为buffer.byteLength - offset
- position 指定目标文件开始写入的位置(以字节为单位)
fs.write(fd, buffer, offset[, length[, position]]) // 返回写入字节数
参数说明:
- fd 文件描述符
- buffer 指定从缓冲区中读取写入到目标文件中的内容
- offset 指定缓冲区中开始读取内容的位置(以字节为单位)。默认为 0
- length 指定在缓冲区中读取的字节数。默认值为buffer.byteLength - offset
- position 指定目标文件开始写入的位置(以字节为单位)
fs.write(fd, string[, position[, encoding]]) // 返回写入字节数
参数说明:
- fd 文件描述符
- string 待写入的内容
- position 指定目标文件开始写入的位置(以字节为单位)
- encoding 编码方式。默认值为 utf8
const fs = require('fs')
fs.open('./fs_file.txt', 'r+', (err, fd) => {
if (err) {
return console.error("打开文件失败:" + err.message)
}
// 同步写入
var writeBytes = fs.writeSync(fd, "烹羊宰牛且为乐,会须一饮三百杯。", 20)
console.log("成功写入字节数:" + writeBytes)
})
console.log("主线程执行完毕")
writeFile 异步写入
fs.writeFile(file, data[, options], callback)
参数说明:
- file 文件名或文件描述符
- data 待写入的数据,可以是String或Buffer对象
- options 参数。参数值包含:
- encoding 编码方式,默认为utf8
- mode 模式,默认为0o666
- flag 标记,默认为w
- flush 若所有数据都成功写入,且其值为true,则使用
fs.fsync()
刷新数据。默认为false
- signal 允许中止正在进行的写入文件
- callback 回调函数
- err 错误对象。若写入失败时,会传入错误对象;写入成功,会传入 null
const fs = require('fs')
// 异步写入
fs.writeFile('./fs_file.txt', "天生我才必有用", (err) => {
// 若写入失败时,调用回调函数时,会传入错误对象;写入成功,会传入 null
if (err) {
return console.error("文件写入失败:" + err.message)
}
console.log("写入完毕")
})
console.log("主线程执行完毕")
writeFileSync 同步写入
fs.writeFileSync()
参数说明:
- file 文件名或文件描述符
- data 待写入的数据,可以是String或Buffer对象
- options 参数。参数值包含:
- encoding 编码方式,默认为utf8
- mode 模式,默认为0o666
- flag 标记,默认为w
- flush 若所有数据都成功写入,且其值为true,则使用
fs.fsyncSync()
刷新数据
const fs = require('fs')
// 同步写入
fs.writeFileSync('./fs_fileSync.txt', "天生我才必有用")
console.log("主线程执行完毕")
appendFile 异步追加写入
fs.appendFile(file, data[, options], callback)
参数说明:
- file 文件名或文件描述符
- data 待追加写入的数据,可以是String或Buffer对象
- options 参数。参数值包含:
- encoding 编码方式,默认为utf8
- mode 模式,默认为0o666
- flag 标记,默认为a
- flush 其值若为true,则在关闭基础文件描述符之间将其刷新。默认为false
- callback 回调函数。
- err 错误对象。若追加写入失败时,会传入错误对象;追加写入成功,会传入 null
// 异步追加写入
const fs = require('fs')
fs.appendFile('./fs_file.txt', ",千金散尽还复来", (err) => {
// 若写入失败时,调用回调函数时,会传入错误对象;写入成功,会传入 null
if (err) {
return console.error("文件追加写入失败:" + err.message)
}
console.log("追加写入完毕")
})
console.log("主线程执行完毕")
appendFileSync 同步追加写入
fs.appendFileSync(file, data[, options])
参数说明:
- file 文件名或文件描述符
- data 待追加写入的数据,可以是String或Buffer对象
- options 参数。参数值包含:
- encoding 编码方式,默认为utf8
- mode 模式,默认为0o666
- flag 标记,默认为a
- flush 其值若为true,则在关闭基础文件描述符之间将其刷新。默认为false
const fs = require('fs')
// 同步写入
fs.appendFileSync('./fs_fileSync.txt', ",千金散尽还复来")
console.log("主线程执行完毕")
createWriteStream 流式写入
fs.createWriteStream(file[, options]) // 返回一个写入流对象
- file 文件名或文件描述符
- options 参数。参数值包含:
- encoding 编码方式,默认为utf8
- mode 模式,默认为0o666
- flag 标记,默认为w
- flush 如果是 true,则在关闭基础文件描述符之前将其刷新。 默认为:false
const fs = require('fs')
const out = fs.createWriteStream('./fs_stream.txt')
out.write("天生我才必有用")
out.write("千金散尽还复来")
out.end()
console.log("主线程执行完毕")
文件读取操作
文件读取就是通过程序取出文件中的数据,,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
read | 异步读取 |
readSync | 同步读取 |
readFile | 异步读取 |
readFileSync | 同步读取 |
createReadStream | 流式读取 |
read 异步读取
Node.js
中提供了三种read
异步读取的函数:
fs.read(fd[, options], callback)
参数说明:
- fd 文件描述符
- options 参数
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
- callback 回调函数
- err 错误对象。若追加写入失败时,会传入错误对象;追加写入成功,会传入 null
- readBytes 读取的字节数
- buffer 读取的内容存放的缓冲区对象
fs.read(fd, buffer[, options], callback)
参数说明:
- fd 文件描述符
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- options 参数
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
- callback 回调函数
- err 错误对象。若追加写入失败时,会传入错误对象;追加写入成功,会传入 null
- readBytes 读取的字节数
- buffer 读取的内容存放的缓冲区对象
fs.read(fd, buffer, offset, length, position, callback)
参数说明:
- fd 文件描述符
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
- callback 回调函数
- err 错误对象。若追加写入失败时,会传入错误对象;追加写入成功,会传入 null
- readBytes 读取的字节数
- buffer 读取的内容存放的缓冲区对象
const fs = require('fs')
fs.open('./fs_file.txt', 'r+', (err, fd) => {
if (err) {
return console.error("打开文件失败:" + err.message)
}
const buf = Buffer.alloc(1024)
// 异步读取
fs.read(fd, buf, 0, buf.length, 0, (err, readBytes, buffer) => {
if (err) {
return console.error("读取文件失败:" + err.message)
}
console.log("成功读取文件字节数:" + readBytes)
console.log("成功读取文件内容:" + buffer.toString())
})
})
console.log("主线程执行完毕")
readSync 同步读取
Node.js
中提供了三种read
同步读取的函数:
fs.readSync(fd[, options]) // 返回 bytesRead 的数量
参数说明:
- fd 文件描述符
- options 参数
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
fs.readSync(fd, buffer[, options]) // 返回 bytesRead 的数量
参数说明:
- fd 文件描述符
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- options 参数
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
fs.readSync(fd, buffer, offset, length, position) // 返回 bytesRead 的数量
参数说明:
- fd 文件描述符
- buffer 指定文件中数据读取到的缓冲区。默认为Buffer.alloc(16384)
- offset 指定将读取的文件数据在缓冲区开始写入的位置(以字节为单位)。默认值为0
- length 指定文件中待读取的字节数 。默认值为buffer.byteLength - offset
- position 指定在目标文件开始读取文件的位置(以字节为单位)
const fs = require('fs')
fs.open('./fs_file.txt', 'r+', (err, fd) => {
if (err) {
return console.error("打开文件失败:" + err.message)
}
const buf = Buffer.alloc(1024)
// 同步读取
var byteReads = fs.readSync(fd, buf, 0, buf.length, 0)
console.log("成功读取文件字节数:" + byteReads)
console.log("成功读取文件内容:" + buf.toString())
})
console.log("主线程执行完毕")
readFile 异步读取
fs.readFile(path[, options], callback)
参数说明:
- path 文件名或文件描述符
- options 参数。参数包含:
- encoding 编码方式,默认为utf8
- flag 标志,默认为r
- signal 允许中止正在进行的读取文件
- callback 回调函数。
- err 若读取失败时,会传入错误对象;读取成功,会传入 null
- data 成功读取时,返回读取的内容
const fs = require('fs')
// 异步读取文件
fs.readFile('./fs_file.txt', (err, data) => {
if (err) {
return console.error("读取文件失败:" + err.message)
}
console.log("成功读取文件内容:" + data)
})
console.log("主线程执行完毕")
readFileSync 同步读取
fs.readFileSync(path[, options]) // 返回 读取的文件内容
参数说明:
- path 文件名或文件描述符
- options 参数。参数包含:
- encoding 编码方式,默认为utf8
- flag 标志,默认为r
const fs = require('fs')
// 同步读取文件
const data = fs.readFileSync('./fs_fileSync.txt')
console.log("成功读取文件内容:" + data)
console.log("主线程执行完毕")
createReadStream 流入读取
fs.createReadStream([options]) // 返回一个读取流对象
参数说明:
- options 参数。参数包含:
- encoding 编码方式,默认为utf8
read 与 readFile 的区别
- 本质上,
fs.readFile()
是对fs.read()
的进一步封装,fs.readFile()
可以更方便的读取文件内容 fs.read()
比fs.readFile()
读取文件内容可操作性更强。使用fs.read()
读取文件,首先需要用fs.stat()
判断文件的大小,然后使用fs.open()
创建文件描述符,最后再使用fs.read()
读取文件内容
文件重命名或移动
Node.js
中可对文件进行重命名或移动,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
rename | 异步重命名或移动 |
renameSync | 同步重命名或移动 |
rename 异步重命名或移动
fs.rename(oldPath, newPath, callback)
参数说明:
- oldPath 文件当前路径
- newPath 文件新的路径
- callback 回调函数
err 若操作失败时,会传入错误对象;操作成功,会传入 null
const fs = require('fs')
// 异步移动或重命名文件、
fs.rename('./Node.txt', './node.txt', (err) => {
if (err) {
console.error("异步移动或重命名文件失败:" + err.message)
}
})
console.log("主线程执行完毕")
renameSync 同步重命名或移动
fs.renameSync(oldPath, newPath)
参数说明:
- oldPath 文件当前路径
- newPath 文件新的路径
const fs = require('fs')
// 同步移动或重命名文件
fs.renameSync('./node.txt', './Node.txt')
console.log("主线程执行完毕")
截取文件
Node.js
中可对文件进行截取,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
ftruncate | 异步截取 |
ftruncateSync | 同步截取 |
ftruncate 异步截取
fs.ftruncate(fd[, len], callback)
参数说明:
- fd 通过**fs.open()**返回的文件描述符
- len 文件内容截取的长度。默认为0
- callback 回调函数
err 若操作失败时,会传入错误对象;操作成功,会传入 null
const fs = require('fs')
// 打开文件
fs.open('./fs_file.txt', 'r+', (err, fd) => {
if (err) {
return console.error("文件打开失败:" + err.message);
}
console.log("文件打开成功!");
// 异步 截取 10字节 内的文件内容,超出部分将被去除
fs.ftruncate(fd, 10, (err) => {
if (err) {
return console.error("截取文件内容失败:" + err.message);
}
console.log("文件截取成功!");
fs.close(fd, (err) => {
if (err) {
return console.error("文件关闭失败:" + err.message);
}
console.log("文件关闭成功!");
})
})
})
ftruncateSync 同步截取
fs.ftruncateSync(fd[, len])
参数说明:
- fd 通过**fs.open()**返回的文件描述符
- len 文件内容截取的长度。默认为0
// 打开文件
const fs = require('fs')
fs.open('./fs_fileSync.txt', 'r+', (err, fd) => {
if (err) {
return console.error("文件打开失败:" + err.message);
}
console.log("文件打开成功!");
// 同步 截取 10字节 内的文件内容,超出部分将被去除
fs.ftruncateSync(fd, 10)
fs.close(fd, (err) => {
if (err) {
return console.error("文件关闭失败:" + err.message);
}
console.log("文件关闭成功!");
})
})
console.log("主线程执行完毕")
文件删除
Node.js
中可对文件或符号链接进行删除,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
unlink | 异步删除 |
unlinkSync | 同步删除 |
const fs = require('fs')
// 异步删除文件
fs.unlink('./fs_file_bak.txt', (err) => {
if (err) {
console.error("删除文件失败:" + err.message)
}
})
console.log("主线程执行完毕")
unlink 异步删除
fs.unlink(path, callback)
参数说明:
- path 文件路径
- callback 回调函数
err 若操作失败时,会传入错误对象;操作成功,会传入 null
unlinkSync 同步删除
fs.unlink(path)
参数说明:
- path 文件路径
const fs = require('fs')
// 同步删除文件
fs.unlinkSync('./fs_file_bak.txt')
console.log("主线程执行完毕")
打开文件
Node.js
中提供了打开文件的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
open | 异步打开 |
openSync | 同步打开 |
open 异步打开
fs.open(path, flag[, mode], callback)
参数说明:
- path 文件的路径
- flag 文件打开行为标记
- r 以读模式打开文件,若文件不存在则抛出异常
- r+ 以读写模式打开文件,若文件不存在则抛出异常
- rs 以同步的方式读取文件
- rs+ 以同步的方式读取和写入文件
- w 以写入的模式打开文件,若文件不存在则创建
- w+ 以读写的模式打开文件,若文件不存在则创建
- wx 以写入的模式打开文件,若文件存在,则文件写入失败
- wx+ 以读写的模式开始文件,若文件存在,则文件写入失败
- a 以追加的模式打开文件,若文件不存在则创建
- a+ 以读取追加模式打开文件,若文件不存在则创建
- ax 以追加模式打开文件,若文件存在,则追加失败
- ax+ 以读取追加模式打开文件,若文件存在,则追加失败
- mode 文件权限,文件创建默认为0o666(可读、可写)
- callback 回调函数
- err 若操作失败时,会传入错误对象;操作成功,会传入 null
- fd 文件描述符
const fs = require('fs')
// 异步打开文件
fs.open('./fs_file.txt', 'r', (err, fd) => {
if (err) {
console.error("打开文件失败:" + err.message)
}
console.log("打开文件成功:" + fd)
})
console.log("主线程执行完毕")
openSync 同步打开
fs.open(path, flag[, mode]) // 返回文件描述符
参数说明:
- path 文件的路径
- flag 文件打开行为标记
- r 以读模式打开文件,若文件不存在则抛出异常
- r+ 以读写模式打开文件,若文件不存在则抛出异常
- rs 以同步的方式读取文件
- rs+ 以同步的方式读取和写入文件
- w 以写入的模式打开文件,若文件不存在则创建
- w+ 以读写的模式打开文件,若文件不存在则创建
- wx 以写入的模式打开文件,若文件存在,则文件写入失败
- wx+ 以读写的模式开始文件,若文件存在,则文件写入失败
- a 以追加的模式打开文件,若文件不存在则创建
- a+ 以读取追加模式打开文件,若文件不存在则创建
- ax 以追加模式打开文件,若文件存在,则追加失败
- ax+ 以读取追加模式打开文件,若文件存在,则追加失败
- mode 文件权限,文件创建默认为0o666(可读、可写)
const fs = require('fs')
// 同步打开文件
fs.openSync('./fs_file.txt', 'r')
console.log("主线程执行完毕")
关闭文件
Node.js
中提供了关闭文件的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
close | 异步关闭 |
closeSync | 同步关闭 |
close 异步关闭
fs.close(fd, callback)
参数说明:
- fd 文件描述符
- callback 回调函数
- err 若操作失败时,会传入错误对象;操作成功,会传入 null
const fs = require('fs')
// 异步打开文件
fs.open('./fs_file.txt', 'r', (err, fd) => {
if (err) {
console.error("打开文件失败:" + err.message)
}
// 异步关闭
fs.close(fd, (err) => {
if (err) {
console.error("关闭文件失败:" + err.message)
}
})
})
console.log("主线程执行完毕")
closeSync 同步关闭
fs.closeSync(fd, callback)
参数说明:
- fd 文件描述符
const fs = require('fs')
// 异步打开文件
fs.open('./fs_file.txt', 'r', (err, fd) => {
if (err) {
console.error("打开文件失败:" + err.message)
}
// 同步关闭
fs.closeSync(fd)
})
console.log("主线程执行完毕")
文件夹操作
创建文件夹
Node.js
中提供了多种创建文件夹的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
mkdir | 异步创建 |
mkdirSync | 同步创建 |
mkdir 异步创建
fs.mkdir(path[, options], callback)
参数说明:
- path 文件夹路径
- options 参数配置
- recursive 是否以递归的方式创建目录。默认值为 false
- mode 设置目录权限。默认为 0o777
- callback
err 若操作失败时,会传入错误对象;操作成功,会传入 null
path 仅当创建目录时将 recursive 设置为 true返回第一层目录的绝对路径。
const fs = require('fs')
// 异步创建文件夹
fs.mkdir('./abc', { recursive: true }, (err, path) => {
if (err) {
return console.error("创建文件夹失败:" + err.message)
}
console.log(path)
})
mkdirSync 同步创建
fs.mkdirSync(path[, options]) // 返回 undefined 或 第一层目录的绝对路径(仅当创建目录时将 recursive 设置为 true返回)
参数说明:
- path 文件夹路径
- options 参数配置
- recursive 是否以递归的方式创建目录。默认值为 false
- mode 设置目录权限。默认为 0o777
const fs = require('fs')
// 同步创建文件夹
var path = fs.mkdirSync('./xyz', { recursive: true })
console.log(path)
读取文件夹
Node.js
中提供了多种读取文件夹的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
readdir | 异步读取 |
readdirSync | 同步读取 |
readdir 异步读取
fs.readdir(path[, options], callback)
参数说明:
- path 文件夹路径
- options 参数配置
- encoding 编码格式。默认值为utf8
- withFileTypes 设置 files 数组中是否包含 fs.Dirent对象。默认为false
- recursive ** 设置是否递归列出目录下所有文件。默认为false**
- callback 回调函数
- err 若操作失败时,会传入错误对象;操作成功,会传入 null
- files 成功读取的文件列表
const fs = require('fs')
// 异步读取文件夹
fs.readdir('../', { encoding: 'utf8', withFileTypes: true, recursive: true }, (err, files) => {
if (err) {
console.error("读取文件夹失败:" + err.message)
}
console.log(files)
})
readdirSync 同步读取
fs.readdirSync(path[, options]) // 返回目录列表
参数说明:
- path 文件夹路径
- options 参数配置
- encoding 编码格式。默认值为utf8
- withFileTypes 设置 files 数组中是否包含 fs.Dirent对象。默认为false
- recursive ** 设置是否递归列出目录下所有文件。默认为false**
const fs = require('fs')
// 同步读取文件夹
var files = fs.readdirSync('../', { encoding: 'utf8', withFileTypes: true, recursive: true })
console.log(files)
删除文件/文件夹
Node.js
中提供了多种删除和文件夹的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
rm | 异步删除 |
rmSync | 同步删除 |
rm 异步删除
fs.rm(path[, options], callback)
参数说明:
- path 路径
- options 参数配置
- force 表示当设置为true时,路径不存在忽略异常;否则抛出异常。默认为false
- maxRetries 重试次数。若recursive为false,则忽略此选项。默认值为 0
- recursive 是否执行递归删除。默认值为false。
已弃用
- retryDeley 重试等待时长,单位毫秒。若recursive为false,则忽略此选项。默认值为 100
- callback 回调函数
- err 若操作失败时,会传入错误对象;操作成功,会传入 null
const fs = require('fs')
// 异步删除文件或文件夹
fs.rm('./x', { force: true, maxRetries: 3, recursive: true, retryDelay: 200 }, (err) => {
if (err) {
console.log("删除文件夹失败:" + err.message)
}
})
rmSync 同步删除
fs.rmSync(path[, options])
参数说明:
- path 文件夹路径
- options 参数配置
- force 表示当设置为true时,路径不存在忽略异常;否则抛出异常。默认为false
- maxRetries 重试次数。若recursive为false,则忽略此选项。默认值为 0
- recursive 是否执行递归删除。默认值为false。
已弃用
- retryDeley 重试等待时长,单位毫秒。若recursive为false,则忽略此选项。默认值为 100
const fs = require('fs')
// 同步删除文件或文件夹
fs.rmSync('./x', { force: true, maxRetries: 3, recursive: true, retryDelay: 10 })
console.log(xx)
查看资源信息
Node.js
中提供了获取资源信息的操作,fs
模块提供了多种方法实现:
方法 | 说明 |
---|---|
stat | 异步获取 |
statSync | 同步获取 |
stat 异步获取
fs.stat(path[, options], callback)
参数说明:
- path 文件路径
- options 指定返回的 fs.Stats 对象中的数值是否应为 bigint。 默认值为false
- callback 回调函数
- err 若操作失败时,会传入错误对象;操作成功,会传入 null
- stats Stats对象包含文件路径的详细信息
stats类中的方法
方法 | 描述 |
---|---|
stats.isFile() | 判断是否为 文件 |
stats.isDirectory | 判断是否为 目录 |
stats.isBlockDevice() | 判断是否为 块设备 |
stats.isCharacterDevice() | 判断是否为 字符设备 |
stats.isSymbolicLink() | 判断是否为 软链接 |
stats.isFIFO | 判断是否为 FIFO(FIFO是 UNIX 中的一种特殊的命令管道) |
stats.isSocket | 判断是否为 socket |
const fs = require('fs')
// 异步获取文件信息
fs.stat('./fs_file.txt', (err, stats) => {
if (err) {
return console.error("获取文件信息失败:" + err.message)
}
console.log(stats)
// 检查文件属性
console.log(stats.isFile())
})
console.log("主线程执行完毕")
statSync 同步获取
fs.stat(path[, options]) // 返回 stats 对象
参数说明:
- path 文件路径
- options 指定返回的 fs.Stats 对象中的数值是否应为 bigint。 默认值为false
stats类中的方法
方法 | 描述 |
---|---|
stats.isFile() | 判断是否为 文件 |
stats.isDirectory | 判断是否为 目录 |
stats.isBlockDevice() | 判断是否为 块设备 |
stats.isCharacterDevice() | 判断是否为 字符设备 |
stats.isSymbolicLink() | 判断是否为 软链接 |
stats.isFIFO | 判断是否为 FIFO(FIFO是 UNIX 中的一种特殊的命令管道) |
stats.isSocket | 判断是否为 socket |
const fs = require('fs')
// 异步获取文件信息
var stats = fs.statSync('./fs_file.txt')
console.log(stats)
console.log("主线程执行完毕")
扩展
路径
fs模块对资源进行操作时,路径有两种写法:
- 相对路径
./
表示当前目录(省略该符号也表示当前目录)。例:./data.txt 表示当前目录下的data.txt文件../
表示当前目录的上一级目录。例:…/data.txt 表示当前目录的上级目录下的data.txt文件
- 绝对路径
注意:
相对路径中的当前目录
指的是 命令行的工作目录,而非文件的所在目录。所以当命令行的工作目录与文件所在的目录不一致时,会出现以下BUG。
__dirname
__dirname
表示当前文件所在目录的绝对路径。
在使用 fs 模块的时候,尽量使用 __dirname 将路径转换为绝对路径,这样可避免相对路径产生的bug
案例
小文件拷贝
将当前目录下的文件 data.txt 拷贝到 data_bak.txt 中
const fs = require('fs')
fs.readFile('./data.txt', (err, data) => {
if (err) {
console.error("读取文件失败:" + err.message)
}
console.log("成功读取到文件内容:" + data)
fs.writeFile('./data_bak.txt', data, (err) => {
if (err) {
console.error("写入文件失败:" + err.message)
}
console.log("成功写入内容")
})
})