1811a-utils-3

const fs = require("fs");

Usage no npm install needed!

<script type="module">
  import 811aUtils3 from 'https://cdn.skypack.dev/1811a-utils-3';
</script>

README

复制文件夹

const fs = require("fs");


function copyDir(source, target) {
    if (!fs.existsSync(target)) {
        // 1.创建目标目录
        fs.mkdirSync(target);
    }

    // 2.读取源文件夹子目录
    let arr = fs.readdirSync(source)
    // 3.遍历每一个子目录
    arr.forEach(v => {
        // 拼接路径
        let midSource = source + "/" + v
        let midTarget = target + "/" + v
        if (fs.statSync(midSource).isFile()) {
            // 是文件
            fs.copyFileSync(midSource, midTarget)
        } else {
            // 是文件夹
            copyDir(midSource, midTarget)
        }
    })
}



copyDir("demo", "demo1")

删除文件夹

const fs = require("fs");
// 算法实现: 删除非空文件夹


function removeDir(dir) {
    // 1.获取文件夹的子目录
    let arr = fs.readdirSync(dir);
    // 2.循环子目录
    arr.forEach(v => {
        // 路径拼接下
        v = dir + "/" + v;
        // 2-1 读取文件信息    
        let isFile = fs.statSync(v).isFile()
        // 2-2 判断是文件还是文件夹
        if(isFile){
            // 是文件  直接删除
            fs.unlinkSync(v)
        }else{
            // 是文件夹  
            // 递归删除文件夹
            removeDir(v)
        }
    })
    // 3.删除文件夹
    fs.rmdirSync(dir);

}


removeDir("demo")

转化

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

function dirToJSON(dir) {
    let info = fs.statSync(dir)
    if (info.isFile()) {
        // 是文件
        return {
            // 获取路径最后一个名字
            basename: path.basename(dir),
            pathname: dir,
            extname: path.extname(dir),
            type: "file",
            size: info.size,
            content: fs.readFileSync(dir, "utf-8")
        }
    } else {
        // 是文件夹
        return {
            pathname: dir,
            type: "dir",
            children: fs.readdirSync(dir).map(v => {
                return dirToJSON(dir + "/" + v)
            })
        }

    }
}



// let o = dirToJSON("demo");
// fs.writeFileSync("data.json", JSON.stringify(o))


function JSONToDir(obj) {
    if (obj.type === "dir") {
        // 是文件夹
        fs.mkdirSync(obj.pathname);
        obj.children.forEach(item => {
            JSONToDir(item)
        })
    } else {
        // 是文件
        fs.writeFileSync(obj.pathname, obj.content)
    }
}

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