node 封装递归读取文件

简介: node 封装递归读取文件
const fs = require('fs');
const path = require('path');
class File {
    constructor(filename, name, ext, isFile, size, createTime, updateTime) {
        this.filename = filename;// 文件的根目录
        this.name = name; // name: '文件名',
        this.ext = ext;  //     ext: '后缀名',
        this.isFile = isFile;//     isFile: '是否为一个文件',
        this.size = size;//     size: '文件大小',
        this.createTime = createTime; //     createTime: '创建时间',
        this.updateTime = updateTime;  //     updateTime: '修改时间'
    }
    async getChildren() {
        // 如果当前是一个文件,则不存在子文件
        if (!this.isFile) return [];
        // 如果是文件夹,那么获取文件夹里面的内容
        let childrenFiles = await fs.promises.readdir(this.filename);
        childrenFiles = childrenFiles.map(fileName => {
            const getFileName = path.resolve(this.filename, fileName);
            return File.getFile(getFileName);
        })
        return Promise.all(childrenFiles)
    }
    /**
     * 读取文件的内容
     * @param isBuffer {Boolean}
     * @returns {Promise<string|Buffer>}
     */
    async getContent(isBuffer = false) {
        if (this.isFile) return '';
        if (isBuffer) {
            return await fs.promises.readFile(this.name, 'buffer');
        } else {
            return await fs.promises.readFile(this.name, 'utf-8');
        }
    }
    /**
     * 构建每一个文件对象的详情
     * @param fileName {String} 文件名称, 全路径
     * @returns {Promise<File>}
     */
    static async getFile(fileName) {
        let statDirInfo = await fs.promises.stat(fileName)
        let name = path.basename(fileName); // 文件或者文件夹的名称
        let ext = path.extname(fileName); // 获取后缀名
        return new File(fileName, name, ext, statDirInfo.isDirectory(), statDirInfo.size, new Date(statDirInfo.birthtime).toLocaleDateString(), new Date(statDirInfo.mtime).toLocaleDateString());
    }
}
/**
 * 获取根据路径获取文件
 * @param dirPath
 * @returns {Promise<[]|unknown[]>}
 */
async function getDirAllInfo(dirPath) {
    let dir = await File.getFile(dirPath);
    return await dir.getChildren();
}
// 测试
(async () => {
    let dirName = path.resolve(__dirname, './fsModule');
    let res = await getDirAllInfo(dirName);
    console.log(res);
})()
// 每一个文件对象都有两个方法,一个是或者子文件,另一个是读取内容,


20201201191400317.png

相关文章
|
5月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
8月前
|
JSON JavaScript 数据格式
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
|
8月前
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
8月前
|
JSON JavaScript API
Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
|
4月前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
5月前
|
JavaScript
NodeJs——如何下载文件
NodeJs——如何下载文件
117 4
|
5月前
|
机器学习/深度学习 JavaScript
node.js实现遍历所有文件夹里面的js文件,提取所有的url
node.js实现遍历所有文件夹里面的js文件,提取所有的url
|
5月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
8月前
|
JavaScript API Windows
Nodejs 文件 与 路径 相关用法实例解析
Nodejs 文件 与 路径 相关用法实例解析
143 0
|
6月前
|
JavaScript
Vue如何查看node版本---- package.json 文件中的 engines
Vue如何查看node版本---- package.json 文件中的 engines