Skip to content

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.fdinterger,获取到与之关联的文件描述符。
  • 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

fs

readFile()@

fs.readFile()(path, options?, callback)回调Promise,从文件中读取数据。

  • pathstring | Buffer | URL | integer,要读取的文件的路径(可以是路径地址文件描述符

  • options?Object | string,用于指定读取选项,比如编码方式和文件打开模式等

    • encoding?string | nullD:null ,指定编码方式,默认为 null,即返回原始的 Buffer 数据
    • flag?stringD: r,指定文件的打开模式,,见flags模式
    • signal?AbortSignal
  • callback(err, data) => {},回调函数,用于处理读取文件后的结果

    • errError | AggregateError,错误
    • datastring | Buffer,读取到的文件内容,如果指定了 encoding,则以字符串形式返回,否则返回 Buffer 对象。

示例

js
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写入数据到文件中。

  • filestring | Buffer | URL | integer,要写入的文件的路径(可以是路径地址文件描述符

  • datastring | Buffer | TypedArray |DataView,要写入的数据,可以是字符串、Buffer 对象或 Uint8Array 等类型。

  • options?Object |string,指定写入选项,比如编码方式和文件打开模式等

    • encoding?string | nullD:utf8 ,指定编码方式
    • mode?integerD: 0O666(readable and writable),指定文件打开模式
    • flag?stringD: w,指定文件的打开模式,,见flags模式
    • flush?booleanD: false
    • signal?AbortSignal
  • callback(err) => {},回调函数,用于处理写入数据后的结果

    • errError | AggregateError,错误

示例

js
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)打开文件

  • pathstring | Buffer | URL,要打开的文件路径。

  • flags?string | numberD: r,打开文件的方式,见flags模式。

  • mode?string | integerD: 0O666(readable and writable),指定文件打开模式。

  • callback(err, fd) => {},当文件打开完成后调用的回调函数。

    • errError,错误。
    • fdinteger,打开的文件描述符。
  • 注意

    • 通过open()打开的文件,在完成操作之后建议手动使用fs.close()关闭文件。
    • 获取到文件描述符fd之后,可以用来读取文件、写入文件、读取文件信息fs.fstat()

示例

js
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?),关闭一个已经打开的文件

  • fdinteger,已经打开的文件描述符(file descriptor),可以通过 fs.open() 函数获取

  • callback?(err) => {},回调函数,用于处理操作完成后的结果

    • errError,错误

示例

js
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)重命名文件或目录。

  • oldPathstring | Buffer | URL,需要重命名或移动的文件路径

  • newPathstring | Buffer | URL,目标文件的路径,即要将文件重命名或移动到的位置

  • callback(err) => {},当文件重命名或移动完成后调用的回调函数,该函数接收一个错误参数

    • errError|null,错误

示例

js
// 将文件从 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),获取文件或目录的详细信息。

  • pathstring | Buffer | URL,要获取信息的文件或目录的路径

  • options?{ bigint }

    • bigintboolean(false),返回的 fs.Stats对象中的数字值是否使用 bigint
  • callback(err, stats) => {}

    • errError,判断是否发生了错误
    • statsfs.Stats,通过 fs.Stats对象获取各种有关文件或目录的信息

示例

js
// 方式二:异步回调函数
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)创建一个新的目录

  • pathstring | Buffer | URL,要创建的目录路径

  • options?Object | integer,指定创建目录的选项

    • recursive?booleanD: false,如果设置为 true,则会递归地创建父级目录(如果父级目录不存在)
    • mode?string | inetegerD: 0o777,指定目录的权限
  • callback(err, path?) => {},回调函数,用于处理操作完成后的结果

    • errError,错误
    • path?string | undefined,返回创建成功的目录的路径。仅在创建目录时将recursive设置为true时出现。

示例

js
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)读取指定目录中的所有文件和子目录。

  • pathstring | Buffer | URL,要读取的目录路径

  • options?Object | string,指定读取目录的选项

    • encoding?stringD: utf8,指定返回的文件名的字符编码
    • withFileTypes?booleanD: false,如果设置为 true,则返回的数组中将包含 fs.Dirent 对象(代表文件或子目录)而不是字符串
    • recursive?booleanD: false,是否递归变量所有子文件和目录
  • callback(err, files) => {},回调函数,用于处理操作完成后的结果

    • errError,错误
    • filesstring[] | Buffer[] | fs.Dirent[],读取到的文件名和子目录名

示例

js
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)
    })
  })

使用:递归读取文件夹

js
// 递归读取文件夹
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 获取文件或目录的详细信息。

  • fdnumber,要获取信息的文件或目录的文件描述符。

  • options?{ bigint },选项参数:

    • bigintboolean(false),返回的 fs.Stats对象中的数字值是否使用 bigint。
  • callback(err, stats) => {} ,回调函数。

    • errError,判断是否发生了错误。
    • statsfs.Stats,通过 fs.Stats对象获取各种有关文件或目录的信息。
  • 注意:通过文件描述符打开的文件,默认不会自动关闭,需要通过fs.close()手动关闭。

示例

js
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.fdinterger,获取到与之关联的文件描述符。

  • 常用方法

  • 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.fdinterger,获取到与之关联的文件描述符。

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()(),检查当前对象是否是一个目录

示例

js
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)是否是一个文件

  • 返回值:

  • isFileboolean,是否是一个文件。

示例

js
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()(),检查当前对象是否是一个目录

  • 返回:

  • isDirectoryboolean,如果是目录,则返回 true,否则返回 false

示例

js
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,文件的创建时间。

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,