fs
[TOC]
索引
fs:
- fs.readFile():
(path, options?, callback)
,回调,Promise,从文件中读取数据。 - fs.writeFile():
(file, data, options?, callback)
,回调,Promise,写入数据到文件中。 - fs.open():
(path, flags?, mode?, callback)
,打开文件。 - fs.close():
(fd, callback?)
,关闭一个已经打开的文件 - fs.rename():
(oldPath, newPath, callback)
,重命名文件或目录。 - fs.stat():
(path, options?, callback)
,获取文件或目录的详细信息。 - fs.mkdir():
(path, options?, callback)
,创建一个新的目录。 - fs.readdir():
(path, options?, callback)
,读取指定目录中的所有文件和子目录。 - fs.fstat():
(fd, options?, callback)
,通过 fd 获取文件或目录的详细信息。
FileHandle:
- FileHandle:
()
,表示一个打开的文件句柄。它提供了与文件描述符相同的功能,可以使用它的方法进行文件的读写和关闭操作。 - fileHandle.fd:
interger
,获取到与之关联的文件描述符。 - fileHandle.read():
(buffer, offset?, length?, position?)
,从文件中读取数据流。 - fileHandle.write():
(buffer, offset?, length?, position?)
,向文件中写入数据流。 - fileHandle.close():
()
,关闭文件句柄,释放资源。 - fileHandle.appendFile():
(data, options?)
,将指定的数据追加到文件末尾,如果文件不存在,则会创建文件。
fs.Dirent:
- fs.Dirent:
()
,表示文件或目录的信息。当使用fs.readdir()
函数的withFileTypes
选项时,返回的数组中的每个元素都是fs.Dirent
对象,其中包含文件或目录的信息。 - dirent.isFile():
()
,检查当前目录项(dirent)是否是一个文件。 - dirent.isDirectory():
()
,检查当前对象是否是一个目录。
fs.Stats:
- fs.Stats:
,
- stats.size:
,文件大小(以字节为单位)。
- stats.mtime:
,文件的最后修改时间。
- stats.ctime:
,文件的创建时间。
fs
fs
readFile()@
fs.readFile():(path, options?, callback)
,回调,Promise,从文件中读取数据。
path:
string | Buffer | URL | integer
,要读取的文件的路径(可以是路径地址或文件描述符)options?:
Object | string
,用于指定读取选项,比如编码方式和文件打开模式等- encoding?:
string | null
,D:null
,指定编码方式,默认为null
,即返回原始的Buffer
数据 - flag?:
string
,D: r
,指定文件的打开模式,,见flags模式 - signal?:
AbortSignal
,
- encoding?:
callback:
(err, data) => {}
,回调函数,用于处理读取文件后的结果- err:
Error | AggregateError
,错误 - data:
string | Buffer
,读取到的文件内容,如果指定了encoding
,则以字符串形式返回,否则返回Buffer
对象。
- err:
示例:
const fs = require('fs')
fs.readFile('path/to/file.txt', { encoding: 'utf8' }, (err, data) => {
if (err) {
console.error(err)
return
}
console.log(data)
})
writeFile()@
fs.writeFile():(file, data, options?, callback)
,回调,Promise,写入数据到文件中。
file:
string | Buffer | URL | integer
,要写入的文件的路径(可以是路径地址或文件描述符)data:
string | Buffer | TypedArray |DataView
,要写入的数据,可以是字符串、Buffer
对象或 Uint8Array 等类型。options?:
Object |string
,指定写入选项,比如编码方式和文件打开模式等- encoding?:
string | null
,D:utf8
,指定编码方式 - mode?:
integer
,D: 0O666(readable and writable)
,指定文件打开模式 - flag?:
string
,D: w
,指定文件的打开模式,,见flags模式 - flush?:
boolean
,D: false
, - signal?:
AbortSignal
,
- encoding?:
callback:
(err) => {}
,回调函数,用于处理写入数据后的结果- err:
Error | AggregateError
,错误
- err:
示例:
const fs = require('fs')
fs.writeFile('path/to/file.txt', 'Hello, world!', (err) => {
if (err) {
console.error(err)
return
}
console.log('File written successfully!')
})
open()
fs.open():(path, flags?, mode?, callback)
,打开文件。
path:
string | Buffer | URL
,要打开的文件路径。flags?:
string | number
,D: r
,打开文件的方式,见flags模式。mode?:
string | integer
,D: 0O666(readable and writable)
,指定文件打开模式。callback:
(err, fd) => {}
,当文件打开完成后调用的回调函数。- err:
Error
,错误。 - fd:
integer
,打开的文件描述符。
- err:
注意:
- 通过
open()
打开的文件,在完成操作之后建议手动使用fs.close()
关闭文件。 - 获取到文件描述符
fd
之后,可以用来读取文件、写入文件
、读取文件信息fs.fstat()
。
- 通过
示例:
const fs = require('fs')
// 打开文件并获取文件描述符
fs.open('path/to/file.txt', 'r', (err, fd) => {
if (err) {
console.error(err)
} else {
console.log('文件打开成功,文件描述符为:', fd)
// 在这里可以进行对文件的读取或写入操作
// ...
// 关闭文件
fs.close(fd, (err) => {
if (err) {
console.error(err)
} else {
console.log('文件关闭成功!')
}
})
}
})
close()
fs.close():(fd, callback?)
,关闭一个已经打开的文件
fd:
integer
,已经打开的文件描述符(file descriptor),可以通过fs.open()
函数获取callback?:
(err) => {}
,回调函数,用于处理操作完成后的结果- err:
Error
,错误
- err:
示例:
const fs = require('fs')
// 打开文件
fs.open('path/to/file.txt', 'r', (err, fd) => {
if (err) {
console.error(err)
return
}
console.log(`File opened with file descriptor ${fd}.`) +
// 关闭文件
fs.close(fd, (err) => {
if (err) {
console.error(err)
return
}
console.log(`File closed successfully.`)
})
})
rename()
fs.rename():(oldPath, newPath, callback)
,重命名文件或目录。
oldPath:
string | Buffer | URL
,需要重命名或移动的文件路径newPath:
string | Buffer | URL
,目标文件的路径,即要将文件重命名或移动到的位置callback:
(err) => {}
,当文件重命名或移动完成后调用的回调函数,该函数接收一个错误参数- err:
Error|null
,错误
- err:
示例:
// 将文件从 oldPath 重命名为 newPath
fs.rename('oldPath/file.txt', 'newPath/file_renamed.txt', (err) => {
if (err) {
console.error(err)
} else {
console.log('文件重命名成功!')
}
})
stat()
fs.stat():(path, options?, callback)
,获取文件或目录的详细信息。
path:
string | Buffer | URL
,要获取信息的文件或目录的路径options?:
{ bigint }
,- bigint:
boolean(false)
,返回的 fs.Stats对象中的数字值是否使用 bigint
- bigint:
callback:
(err, stats) => {}
,- err:
Error
,判断是否发生了错误 - stats:
fs.Stats
,通过 fs.Stats对象获取各种有关文件或目录的信息
- err:
示例:
// 方式二:异步回调函数
const res = fs.stat('./file/d03.txt', (err, stats) => {
console.log('是否为文件:', stats.isFile())
console.log('是否为目录:', stats.isDirectory())
console.log('修改时间:', stats.mtime)
console.log('创建时间:', stats.ctime)
console.log('文件大小:', stats.size)
})
console.log(res) // undefined
console.log('后续代码执行')
mkdir()
fs.mkdir():(path, options?, callback)
,创建一个新的目录。
path:
string | Buffer | URL
,要创建的目录路径options?:
Object | integer
,指定创建目录的选项- recursive?:
boolean
,D: false
,如果设置为true
,则会递归地创建父级目录(如果父级目录不存在) - mode?:
string | ineteger
,D: 0o777
,指定目录的权限
- recursive?:
callback:
(err, path?) => {}
,回调函数,用于处理操作完成后的结果- err:
Error
,错误 - path?:
string | undefined
,返回创建成功的目录的路径。仅在创建目录时将recursive
设置为true
时出现。
- err:
示例:
const fs = require('fs')
fs.mkdir('path/to/newdir', { recursive: true }, (err, path) => {
if (err) {
console.error(err)
return
}
console.log(`Directory created successfully at ${path}!`)
})
readdir()
fs.readdir():(path, options?, callback)
,读取指定目录中的所有文件和子目录。
path:
string | Buffer | URL
,要读取的目录路径options?:
Object | string
,指定读取目录的选项- encoding?:
string
,D: utf8
,指定返回的文件名的字符编码 - withFileTypes?:
boolean
,D: false
,如果设置为true
,则返回的数组中将包含fs.Dirent
对象(代表文件或子目录)而不是字符串 - recursive?:
boolean
,D: false
,是否递归变量所有子文件和目录
- encoding?:
callback:
(err, files) => {}
,回调函数,用于处理操作完成后的结果- err:
Error
,错误 - files:
string[] | Buffer[] | fs.Dirent[]
,读取到的文件名和子目录名
- err:
示例:
const fs =
require('fs') +
fs.readdir('path/to/directory', { withFileTypes: true }, (err, files) => {
if (err) {
console.error(err)
return
}
files.forEach((file) => {
console.log(file.name)
})
})
使用:递归读取文件夹
// 递归读取文件夹
function readFolders(folder) {
fs.readdir(folder, { withFileTypes: true }, (err, files) => {
files.forEach((file) => {
if (file.isDirectory()) {
const newFolder = path.resolve(dirname, file.name)
readFolders(newFolder)
} else {
console.log(file.name)
}
})
})
}
readFolders(dirname)
fstat()
fs.fstat():(fd, options?, callback)
,通过 fd 获取文件或目录的详细信息。
fd:
number
,要获取信息的文件或目录的文件描述符。options?:
{ bigint }
,选项参数:- bigint:
boolean(false)
,返回的 fs.Stats对象中的数字值是否使用 bigint。
- bigint:
callback:
(err, stats) => {}
,回调函数。- err:
Error
,判断是否发生了错误。 - stats:
fs.Stats
,通过 fs.Stats对象获取各种有关文件或目录的信息。
- err:
注意:通过文件描述符打开的文件,默认不会自动关闭,需要通过
fs.close()
手动关闭。
示例:
const fs = require('fs')
fs.open('file.txt', 'r', (err, fd) => {
if (err) {
console.error(err)
} else {
;+fs.fstat(fd, (err, stats) => {
if (err) {
console.error(err)
} else {
console.log(`是否为文件:${stats.isFile()}`)
console.log(`是否为目录:${stats.isDirectory()}`)
console.log(`文件大小:${stats.size} 字节`)
console.log(`最后修改时间:${stats.mtime}`)
console.log(`创建时间:${stats.ctime}`)
}
fs.closeSync(fd) // 关闭文件描述符
})
}
})
FileHandle
FileHandle
FileHandle:()
,表示一个打开的文件句柄。它提供了与文件描述符相同的功能,可以使用它的方法进行文件的读写和关闭操作。
常用属性:
fileHandle.fd:
interger
,获取到与之关联的文件描述符。常用方法:
fileHandle.read():
(buffer, offset?, length?, position?)
,从文件中读取数据流。fileHandle.write():
(buffer, offset?, length?, position?)
,向文件中写入数据流。fileHandle.appendFile():
(data, options?)
,将指定的数据追加到文件末尾,如果文件不存在,则会创建文件。fileHandle.close():
()
,关闭文件句柄,释放资源。
FileHandle VS 文件描述符:
关系:
FileHandle
类是基于文件描述符的封装,提供了更方便的异步操作语法。可以通过
FileHandle
对象的.fd
属性获取到与之关联的文件描述符。
区别:
当使用
fs.open()
或fs.openSync()
方法打开一个文件时,会返回一个文件描述符。使用
fs.promises.open()
方法打开文件时,会返回一个FileHandle
对象,而不是文件描述符。
fd【
fileHandle.fd:interger
,获取到与之关联的文件描述符。
read()【
fileHandle.read():(buffer, offset?, length?, position?)
,从文件中读取数据流。
:``,
:``,
:``,
返回:
:``,
write()【
fileHandle.write():(buffer, offset?, length?, position?)
,向文件中写入数据流。
:``,
:``,
:``,
返回:
:``,
appendFile()【
fileHandle.appendFile():(data, options?)
,将指定的数据追加到文件末尾,如果文件不存在,则会创建文件。
:``,
:``,
:``,
返回:
:``,
close()【
fileHandle.close():()
,关闭文件句柄,释放资源。
:``,
:``,
:``,
返回:
:``,
fs.Dirent
Dirent
fs.Dirent:()
,表示文件或目录的信息。当使用 fs.readdir()
函数的 withFileTypes
选项时,返回的数组中的每个元素都是 fs.Dirent
对象,其中包含文件或目录的信息。
常用属性:
dirent.name:文件或目录的名称。
常用方法:
dirent.isFile():
()
,检查当前目录项(dirent)是否是一个文件。dirent.isDirectory():
()
,检查当前对象是否是一个目录。
示例:
const fs = require('fs')
fs.readdir('path/to/directory', { withFileTypes: true }, (err, files) => {
if (err) {
console.error(err)
return
}
files.forEach((dirent) => {
console.log(`Name: ${dirent.name}`)
console.log('---')
})
})
isFile()
dirent.isFile():()
,检查当前目录项(dirent)是否是一个文件。
返回值:
isFile:
boolean
,是否是一个文件。
示例:
const fs = require('fs')
// 遍历目录
fs.readdir('/path/to/directory', { withFileTypes: true }, (err, files) => {
if (err) {
console.error(err)
return
}
// 遍历目录项
files.forEach((file) => {
+ if (file.isFile()) {
console.log(`${file.name} is a file.`)
} else {
console.log(`${file.name} is not a file.`)
}
})
})
isDirectory()
dirent.isDirectory():()
,检查当前对象是否是一个目录。
返回:
isDirectory:
boolean
,如果是目录,则返回true
,否则返回false
示例:
const fs = require('fs')
fs.readdir('path/to/directory', { withFileTypes: true }, (err, files) => {
if (err) {
console.error(err)
return
}
files.forEach((file) => {
if (file.isDirectory()) {
console.log(`${file.name} is a directory`)
} else {
console.log(`${file.name} is a file`)
}
})
})
fs.Stats
Stats【
fs.Stats:,
:``,
:``,
:``,
返回:
:``,
size【
stats.size:,文件大小(以字节为单位)。
:``,
:``,
:``,
返回:
:``,
mtime【
stats.mtime:,文件的最后修改时间。
:``,
:``,
:``,
返回:
:``,
ctime【
stats.ctime:,文件的创建时间。
:``,
:``,
:``,
返回:
:``,