【Node 基础】fs模块

260 阅读1分钟

文件

  • fs.readFile 读
  • fs.writeFile 写
  • fs.appendFile 追加
  • fs.copyFile 复制
  • fs.unlink 删除
  • fs.stat 文件信息
const fs = require('fs')
const util = require('util')
const readFileAsync = util.promisify(fs.readFile)
async function testRead() {
  const res = await readFileAsync('1.txt')
  console.log(res.toString())
}
// 如果文件不存在,则会创建文件
function testWriteFile() {
  fs.writeFileSync('1.txt', 'aaaaaa')
}
function testAppendFile() {
  fs.appendFileSync('1.txt', 'bbbb')
}
function testCopyFile() {
  fs.copyFileSync('1.txt', '2.txt')
}
function testUnlink() {
  fs.unlinkSync('2.txt')
}
function testStat() {
  const res = fs.statSync('1.txt')
  console.log(res)
}

文件夹

  • fs.mkdir 创建文件夹
  • fs.readdir 读取文件夹内容
  • fs.rmdir 删除文件夹(要求文件夹存在且文件夹目录为空)
function testMkdir() {
  fs.mkdirSync('test')
}
function testReaddir() {
  const res = fs.readdirSync('test')
  console.log(res) // [ '1.txt', '2.txt', 'test11' ]
}
function testRmdir() {
  fs.rmdirSync('test/test12')
}

应用

递归创建文件夹

const fsPromises = require('fs/promises')
const path = require('path')
async function mkPath(dirPath) {
  let parts = dirPath.split(path.sep)
  for(let i = 1; i <= parts.length; i++) {
    let current = parts.slice(0, i).join(path.sep)
    try {
      await fsPromises.access(current)
    } catch (err) {
      await fsPromises.mkdir(current)
    }
  }
}
mkPath(path.resolve("a", "b", "c"))

复制文件夹

async function copy(src, dest) {
  const stat = fs.statSync(src)
  if (stat.isDirectory()) {
    copyDir(src, dest)
  } else {
    fs.copyFileSync(src, dest)
  }
}
function copyDir(srcDir, destDir) {
  fs.mkdirSync(destDir, { recursive: true })
  for (const file of fs.readdirSync(srcDir)) {
    const srcFile = path.resolve(srcDir, file)
    const destFile = path.resolve(destDir, file)
    copy(srcFile, destFile)
  }
}
copy('test', 'test_copy'