node fs模块 实现文件(文件夹)的增删改

1,948 阅读4分钟

node 中 fs模块

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

如果同步方法报错,则会造成执行失败。

首先需要引入 fs模块 const fs = require('fs')

判断目录是否存在

    const stats = fs.statSync('./index.js') // Stats
    fs.stat('./index.js', function (error, state) {
        error // 错误信息
        state // Stats
    })
    
    Stats {
      dev: 3472390110, // 包含文件的设备的数字标识符。
      mode: 33206, // 描述文件类型和模式的位字段。
      nlink: 1, // 文件存在的硬链接数。
      uid: 0, // 拥有文件的用户的数字用户标识符 (POSIX)。
      gid: 0, // 拥有文件的群组的数字群组标识符 (POSIX)。
      rdev: 0, // 如果文件代表设备,则为数字设备标识符。
      blksize: 4096, // i/o 操作的文件系统块大小。
      ino: 12384898978083840, // 文件的文件系统特定的索引节点编号。
      size: 8826, // 文件的大小(以字节为单位)。
      blocks: 24, // 为此文件分配的块数。
      atimeMs: 1629084741808.1633, // 指示最后一次访问此文件的时间戳,以 POSIX Epoch 以来的毫秒数表示。
      mtimeMs: 1629084732153.9712, // 指示最后一次修改此文件的时间戳,以 POSIX Epoch 以来的毫秒数表示。
      ctimeMs: 1629084732153.9712, // 指示最后一次更改文件状态的时间戳,以 POSIX Epoch 以来的毫秒数表示。
      birthtimeMs: 1606380451997.3667, // 指示此文件创建时间的时间戳,以 POSIX Epoch 以来的毫秒数表示。
      atime: 2021-08-16T03:32:21.808Z, // 指示最后一次访问此文件的时间戳。
      mtime: 2021-08-16T03:32:12.154Z, // 指示最后一次修改此文件的时间戳。
      ctime: 2021-08-16T03:32:12.154Z, // 指示最后一次更改文件状态的时间戳。
      birthtime: 2020-11-26T08:47:31.997Z // 指示此文件创建时间的时间戳。
    }
    
    Stats.isDirectory() // 如果 <fs.Stats> 对象描述文件系统目录,则返回 true。
    Stats.isFile() // 如果 <fs.Stats> 对象描述常规文件,则返回 true。

读取目录

读取目录必须保证当前路径时一个文件夹路径而不是文件

    const fileList = fs.readdirSync('./fileList') // 文件目录
    fs.readdir(dirPath, function (error, fileList) {
        error // 错误信息
        fileList // 文件目录
    })
    
    fileList // 文件夹中的文件目录 例如: [ '.git', 'index.js' ]

读取文件

读取文件必须要保证 当前路径 的文件存在

第二个参数 为 string 表示以什么文件编码打开

    fs.readFileSync('./index.js', 'utf-8')
    fs.readFile('./index.js', 'utf-8', function (error, data) {
        error // 错误信息
        data // 文件内容
    })

删除文件

删除文件必须要保证 当前路径 是一个文件

    fs.unlinkSync('./index.js')
    fs.unlink('./index.js', function (error) {
        error // 错误信息
    })
    
    // 如果删除成功 不会有错误信息

删除文件夹

删除文件夹必须要保证 当前路径 是一个文件夹

    fs.rmdirSync('./fileList')
    fs.rmdir('./fileList', function (error) {
        error // 错误信息
    })
    
    // 如果删除成功 不会有错误信息

创建文件夹

创建文件夹必须要保证当前路径的 所有父级 路径都存在

    fs.mkdirSync('./fileList')
    fs.mkdir('./fileList', function (error) {
        error // 错误信息
    })
    
    // 如果创建成功 不会有错误信息

创建文件

创建文件必须要保证当前路径的 所有父级 都存在

    const data = '文件内容'
    
    fs.writeFileSync('./index.js', data)
    fs.writeFile('./fileList', data, function (error) {
        error // 错误信息
    })
    
    // 如果创建成功 不会有错误信息

追加文件

追加文件文件是指 在文件的最后面 添加一段数据

追加文件必须要保证 当前路径 的文件存在

    const data = '需要追加的文件内容'
    
    fs.appendFileSync('./index.js', data)
    fs.appendFile('./fileList', data, function (error) {
        error // 错误信息
    })
    
    // 如果创建成功 不会有错误信息

拷贝文件

第一个参数为 当前文件路径

第二个参数为 需要拷贝到的文件路径(可以修改文件名)

拷贝文件必须要保证 当前路径的文件 和 需要拷贝到路径的所有父级路径 存在

    fs.copyFileSync('./index.js', './index_copy.js')
    fs.copyFile('./index.js', './index_copy.js', function (error) {
        error // 错误信息
    })
    
    // 如果拷贝成功 不会有错误信息

第三方库

yhl-explorer-js - npm (npmjs.com)