utils-1902a-2

function copyDir(src, dest) { // 代码实现 // 1.兼容处理 dest 不存在就创建 !fs.existsSync(dest) && fs.mkdirSync(dest) // 2.读取src的子目录 fs.readdirSync(src).forEach(v => { // 2-1 拼接路径 let midSrc = src + "/" + v let midDest = dest + "/" + v // 2-2 判断是文件还是文件夹 if (fs.statSync(midSrc).isFile()) { // 是文件 // 调用复制文件方法即可 fs.copyFileSync(midSrc, midDest) } else { // 是文件夹 // 递归 copyDir(midSrc, midDest) } }) }

Usage no npm install needed!

<script type="module">
  import utils1902a2 from 'https://cdn.skypack.dev/utils-1902a-2';
</script>

README

复制文件夹

function copyDir(src, dest) {
  // 代码实现
  // 1.兼容处理   dest 不存在就创建
  !fs.existsSync(dest) && fs.mkdirSync(dest)
  // 2.读取src的子目录
  fs.readdirSync(src).forEach(v => {
    // 2-1 拼接路径
    let midSrc = src + "/" + v
    let midDest = dest + "/" + v
    // 2-2 判断是文件还是文件夹
    if (fs.statSync(midSrc).isFile()) {
      // 是文件
      // 调用复制文件方法即可
      fs.copyFileSync(midSrc, midDest)
    } else {
      // 是文件夹
      // 递归
      copyDir(midSrc, midDest)
    }
  })
}

删除文件夹

function delDir(dirPath) {
  // 1.读取文件夹子目录
  let arr = fs.readdirSync(dirPath)
  // 2.循环遍历
  arr.forEach(v => {
    //   2-1  拼接路径
    v = path.join(dirPath, v)
    //   2-2  是文件还是文件夹
    let info = fs.statSync(v)
    //   2-3  文件直接删除  文件夹递归删除
    if (info.isFile()) {
      fs.unlinkSync(v)
    }else{
      delDir(v)
    }
  })
  // 3.删除文件夹本身
  fs.rmdirSync(dirPath)
}

复制文件夹 复杂版

 function copyDirTwo(src, dest) {
  // 代码实现
  // 1.兼容处理   dest 不存在就创建
  !fs.existsSync(dest) && fs.mkdirSync(dest)
  // 2.读取src的子目录
  fs.readdirSync(src).forEach(v => {
    // 2-1 拼接路径
    let midSrc = src + "/" + v
    let midDest = dest + "/" + v
    // 2-2 判断是文件还是文件夹
    let info = fs.statSync(midSrc)
    if (info.isFile()) {
      let i = 0;
      let mid = midDest;
      // 判断目标目录是否存在
      while (fs.existsSync(mid)) {
        // midDest = "1/2/3/4/6/app.js"
        let ext = path.extname(midDest)
        // ext =>  .js
        let dir = path.dirname(midDest)
        // dir => "1/2/3/4/6"
        let name = path.parse(midDest).name
        // name => app
        mid = path.join(dir, name + `(${++i})` + ext)
        // midDest = "1/2/3/4/6/app(4).js"
      }

      midDest = mid

      // 处理文件
      // 是文件
      // 文件超过 4m 是大文件  
      // 文件小于 4m 是小文件
      if (info.size > 4000) {
        // 大文件读取写入
        let read = fs.createReadStream(midSrc)
        let write = fs.createWriteStream(midDest)
        read.pipe(write)
      } else {
        fs.copyFileSync(midSrc, midDest)
      }
    } else {
      // 是文件夹
      // 递归
      // 小文件
      copyDir(midSrc, midDest)
    }
  })
}

JSON 转化 文件

const path = require("path")
const fs = require("fs");


function JSONToDir(data) {
  if (data.isFile) {
    // 是文件
    // 写入文件
    fs.writeFileSync(data.pathname, data.content)
  } else {
    // 是文件夹
    // 创建文件夹
    fs.mkdirSync(data.pathname);
    // 循环子目录 递归调用
    data.children.forEach(v => {
      JSONToDir(v)
    })

  }
}


let data = JSON.parse(fs.readFileSync("data.json"))
JSONToDir(data)

文件夹转化 JSON




const fs = require("fs");
const path = require("path");

function dirToJSON(dir) {
  // 1.读取文件信息
  let info = fs.statSync(dir)
  // 2.判断是文件还是文件夹
  if (info.isFile()) {
    // 是文件
    return {
      isFile: true,
      name: path.parse(dir).name,
      ext: path.parse(dir).ext,
      base: path.parse(dir).base,
      pathname: dir,
      size: info.size,
      content: fs.readFileSync(dir, "utf8")
    }
  } else {
    // 是文件夹
    return {
      isFile: false,
      name: path.parse(dir).name,
      pathname: dir,
      children: fs.readdirSync(dir).map(v => {
        v = path.join(dir, v)
        return dirToJSON(v)
      })
    }
  }
}


let obj = dirToJSON("3")
fs.writeFileSync("data.json", JSON.stringify(obj))