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:,文件的创建时间。
:``,
:``,
:``,
返回:
:``,