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("成功写入内容")
  })
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值