nodejs文件工具

 

// @ts-ignore
const fs = require('fs');
// @ts-ignore
const path = require('path');
// @ts-ignore
export default class FileUtil {
    /**
     * 复制目录、子目录,及其中的文件
     * @param {String} src 要复制的目录
     * @param {String} dist 复制到目标目录
     */
    static copyDir(src, dist) {
        if (!fs.existsSync(dist)) {
            this.mkdirsSync(dist); //创建目录
        }
        this.copy(src, dist);
    }


    /**
     * 递归创建目录
     * @param {string} dirname  目录路径
     */
    static mkdirsSync(dirname) {
        if (fs.existsSync(dirname)) return true;
        if (this.mkdirsSync(path.dirname(dirname))) {
            fs.mkdirSync(dirname);
            return true;
        }
    }

    /**
     * 异步深度循环删除目录
     * @param {string} path 需要删除的目录
     */
    static delDir(path) {
        if (!fs.existsSync(path)) return;
        const stats = fs.statSync(path);
        if (stats.isDirectory()) {
            const names = fs.readdirSync(path);
            for (const name of names) {
                this.delDir(path.join(path, name));
            }
            fs.rmdirSync(path);
        } else if (stats.isFile()) {
            fs.unlinkSync(path);
        }
    }

    /**
     * 复制目录、子目录,及其中的文件
     * @param {String} src 要复制的目录
     * @param {String} dist 复制到目标目录
     */
    static copy(src, dist) {
        if (!fs.existsSync(src)) return;
        const stats = fs.statSync(src);
        if (stats.isDirectory()) {
            if (!fs.existsSync(dist)) fs.mkdirSync(dist);
            const names = fs.readdirSync(src);
            for (const name of names) {
                this.copy(path.join(src, name), path.join(dist, name));
            }
        } else if (stats.isFile()) {
            fs.writeFileSync(dist, fs.readFileSync(src));
        }
    }

    /**
     * 遍历文件/文件夹并执行函数
     * @param {fs.PathLike} path 路径
     * @param {(filePath: fs.PathLike, stat: fs.Stats)=>void} handler 处理函数
     */
    static map(path, handler) {
        if (!fs.existsSync(path)) return;
        const stats = fs.statSync(path);
        if (stats.isDirectory()) {
            const names = fs.readdirSync(path);
            for (const name of names) {
                this.map(path.join(path, name), handler);
            }
        } else if (stats.isFile()) {
            handler(path, stats);
        }
    }
};

  

上一篇:APP Invertor 制作BLE蓝牙APP 控制esp32蓝牙小车


下一篇:在docker中haproxy的安装以及mysql的负载均衡配置