首页 > 编程语言 >node.js 封装操作文件类

node.js 封装操作文件类

时间:2024-05-10 13:22:21浏览次数:30  
标签:node const await fileName return 封装 js isFile children

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

class File {
    constructor(fileName, name, ext, isFile, size, createTime, updateTime) {
        this.fileName = fileName;
        this.name = name;
        this.ext = ext;
        this.isFile = isFile;
        this.size = size;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    async getContent(isBuffer = false) {
        if(!this.isFile) return null;
        if(isBuffer) {
            return await fs.promises.readFile(this.fileName)
        }
        return await fs.promises.readFile(this.fileName, 'utf-8');
    }

    async getChildren() {
        if(this.isFile) return [];
        let children = await fs.promises.readdir(this.fileName);
        children = children.map(name => {
            const result = path.resolve(this.fileName, name);
            return File.getFile(result);
        });
        return Promise.all(children);
    }

    static async getFile(fileName) {
        const stat = await fs.promises.stat(fileName);
        const name = path.basename(fileName);
        const ext = path.extname(fileName);
        const isFile = stat.isFile();
        const size = stat.size;
        const createTime = stat.birthtime.toLocaleString();
        const updateTime = stat.mtime.toLocaleString();
        return new File(fileName, name, ext, isFile, size, createTime, updateTime);
    }
}

// 读取一个目录中的所有子目录和文件
async function readDir(fileName) {
    const file = await File.getFile(fileName);
    return await file.getChildren();
}

async function deepChildren(fileList) {
    for(let i = 0; i < fileList.length; i++) {
        fileList[i].children = await fileList[i].getChildren();
        if(fileList[i].children.length !== 0) {
            await deepChildren(fileList[i].children);
        }
    }
}

标签:node,const,await,fileName,return,封装,js,isFile,children
From: https://www.cnblogs.com/bingquan1/p/18184105

相关文章

  • 2024-05-10 js 常用数组方法
    push():向数组的末尾添加一个或多个元素,并返回新的长度。pop():删除并返回数组的最后一个元素。shift():删除并返回数组的第一个元素。unshift():向数组的开头添加一个或多个元素,并返回新的长度。splice():通过删除或替换现有元素或者添加新元素来修改数组,并以数组形式返回被修改......
  • 更优雅的使用Gson解析Json
     Gson背靠Google这棵大树,拥有广泛的社区支持和相对丰富的文档资源,同时因其简单直观的API,一直以来基本稳坐Android开发序列化的头把交椅(直到Google宣布kotlin成为Android开发的首选语言)。本文对Gson的使用及主要流程做下分析。Gson的基本使用Gson依赖 kotlin复制代码d......
  • 2024-05-10 js原型和原型链
    js中原型(Prototype)和原型链是两个东西,且彼此相关。原型:js中的对象。原型链(PrototypeChain):获取js中对象的方式。例:functioniuniko(e){this.value=e;}我们创建了一个iuniko的函数,并分配了一个对象,我们获取该函数中的对象实际就是获取原型。varnum......
  • 遗传算法求解经典车间调度问题(JSP)
    车间调度问题Job-Shopschedulingproblem(JSP)车间调度问题(NP-hard问题):​ n个工件在m台机器上加工,每个工件有特定的加工工艺,每个工件加工的顺序及每道工序所花时间给定,安排工件在每台机器上工件的加工顺序,使得某种指标最优。题设为:1)不同工件的工序之间无顺序约束;2)工序开始则......
  • 配置node_exporter
    配置node_exporter配置node_exporter可以通过--web.listen-address和--web.telemetry-path参数来设置端口和路径。例如:node_exporter--web.listen-address=":9600"--web.telemetry-path="/node_metrics"禁用收集器许多收集器默认都是启用的。使用no-前缀来修改状态。例如,......
  • Fastjson反序列化漏洞
    Fastjson简介Fastjson是一个Java库,可以实现json和对象之间的转换。将数据与对象进行转化,这个操作涉及到了反序列化。与原生的Java反序列化不同,FastJson反序列化并未使用readObject方法,而是自定义了反序列化的过程。通过在反序列化的过程中自动调用类属性的setter方法......
  • 继承介绍、经典类和新式类、继承和抽象、封装和派生、组合
    【一】继承介绍继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。子类会“遗传”父类的属性,从而解决代码重用问题(去掉冗余的代码)继承:单继承:继承一个父类的子类多继承:继承多个父类的子类c......
  • 为 jsencrypt 增加私钥加密公钥解密的方法逻辑
    首先声明,使用RSA非对称加密,正常的使用情景是公钥加密、私钥解密。因为正常使用情景下,公钥是公开的,如果将私钥加密的数据发出去,使用公钥解密,其实理论上并没有起到加密的作用。私钥加密、公钥解密的使用场景是在于防篡改,确定私钥发来的数据是正确的。其实某种程度来说,确实就没......
  • 01--JS01--入门
    JavaScript01:基础入门JavaScript是一门能够运行在浏览器上的脚本语言,简称JS。首先,Javascript这个名字的由来就很有意思,不少人认为Javascript和Java貌似很像,容易想象成Java的脚本但其实两者之间没有任何关系,纯粹是商业碰瓷。既然JS是可以运行在浏览器上的脚本,并且本质上......
  • OSX上管理多个版本的Nodejs,并且随意切换
    Nodejs的项目经常Node自身的版本不同而无法运行,如果每次都选择卸载掉一个版本的Nodejs再安装另外一个版本的Nodejs,会很费劲,通过如下命令切换。例如:#Forexample#Installmainnodeversion18$brewinstallnode@18#Addthemainversionto~/.zshrctomakestarte......