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); })() // 每一个文件对象都有两个方法,一个是或者子文件,另一个是读取内容,