Node.js教程-fs模块

fs模块概述

fsfile 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 待写入的数据,可以是StringBuffer对象
  • 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 待写入的数据,可以是StringBuffer对象
  • 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 待追加写入的数据,可以是StringBuffer对象
  • 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 待追加写入的数据,可以是StringBuffer对象
  • 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 的区别
  1. 本质上,fs.readFile()是对fs.read()的进一步封装,fs.readFile()可以更方便的读取文件内容
  2. 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 重试次数。若recursivefalse,则忽略此选项。默认值为 0
    • recursive 是否执行递归删除。默认值为false已弃用
    • retryDeley 重试等待时长,单位毫秒。若recursivefalse,则忽略此选项。默认值为 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 重试次数。若recursivefalse,则忽略此选项。默认值为 0
    • recursive 是否执行递归删除。默认值为false已弃用
    • retryDeley 重试等待时长,单位毫秒。若recursivefalse,则忽略此选项。默认值为 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模块对资源进行操作时,路径有两种写法:

  1. 相对路径
    • ./ 表示当前目录(省略该符号也表示当前目录)。例:./data.txt 表示当前目录下的data.txt文件
    • ../ 表示当前目录的上一级目录。例:…/data.txt 表示当前目录的上级目录下的data.txt文件
  2. 绝对路径

注意:相对路径中的当前目录指的是 命令行的工作目录,而非文件的所在目录。所以当命令行的工作目录与文件所在的目录不一致时,会出现以下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("成功写入内容")
  })
})

你可能感兴趣的:(node.js)