const path = require("path");
const fs = require("fs");
// 实现一个读取指定文件、文件夹,返回包含属性、方法的对象,
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 getConent(isBuffer = false) {
if (this.isFile) {
return await fs.promises.readFile(this.fileName, {
encoding: isBuffer ? null : "utf-8",
});
} else {
return null;
}
}
async getChildren() {
if (this.isFile) {
return [];
} else {
let children = await fs.promises.readdir(this.fileName);
children = children.map((childrenName) => {
const childFileName = path.resolve(this.fileName, childrenName);
return File.getFile(childFileName);
});
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 = new Date(stat.birthtime);
const updateTime = stat.mtime;
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 test() {
const fileName = path.resolve(__dirname, "./fsFile");
const result = await readDir(fileName);
console.log(result);
console.log(await result[0].getConent());
}
test();
06-27
09-02
292
07-12