便利贴--31{nodejs,读取路径下所有文件--并且读取文件数据}

这段代码展示了如何使用Node.js读取指定路径下所有文件的名称和数据。`$getFileName`方法遍历目录获取文件名,`$getFileData`方法根据路径读取文件内容。这两个方法可以用于文件管理和数据读取操作。

便利贴--31{nodejs,读取路径下所有文件}

使用

在这里插入图片描述

在这里插入图片描述

let mytool = require("./src/tool/myTool")
mytool.$getFileName("./src/api/user", (res) => {
	console.log(res)
	mytool.$getFileData(res)
})

文件名称

//获取文件夹中文件名称
tool.prototype.$getFileName = function (data, fn = '') {
    let pathName = data.pathName || data,
        chouse = data.chouseName || '',
        //遍历当前目录下所有文件
        dirs = [],//所有文件名集合
        iw = 1,//未识别文件夹个数--传入时候就有个文件夹所以是1
        ij = 0,//文件个数
        doit = (usePathName) => {
            //判断文件夹中的文件数量设定为异步,理论上提高读取速度,需要解决的问题是,如何判断是否读取完所有文件
            fs.readdir(usePathName, function (err, files) {
                let iwIn = 0;
                let ijIn = 0;
                for (let k in files) {//遍历当中 文件名
                    //判断是否是文件夹并记录
                    let stat = fs.lstatSync(path.join(usePathName, files[k]));//同步判断是否是文件夹或者是文件
                    //选用同步方法是为了正常抛出dirs,不需要再判断是否读取完所有文件
                    // if (files[k].indexOf(".") === -1) {//若是文件夹,继续遍历
                    if (stat.isDirectory()) {//若是文件夹,继续遍历
                        iwIn++;//文件夹数量自加
                        doit(usePathName + '/' + files[k])
                    } else {
                        ijIn++;//文件数量自加
                        if (chouse) {
                            usePathName.indexOf(chouse) == -1 || dirs.push({
                                pathName: usePathName,
                                fileName: files[k]
                            });
                        } else {
                            dirs.push({
                                pathName: usePathName,
                                fileName: files[k]
                            })
                        }
                    }
                    // fs.stat(path.join(route[r].pathName, route[r].fileName), function (err, data) {})//异步判断是否是文件夹或者是文件
                    //若选择异步,需要在该异步中,判断文件夹是否读取完
                }
                //记录总数
                iw += (iwIn - 1);//当获取了一个文件夹中的文件后,未读取数量需要减1,就可获得是否读取完所有的文件和文件夹
                ij += ijIn;
                if (iw == 0) {//当未读取文件夹为0时候,抛出
                    // console.log("所有文件夹遍历完成,总文件数量为" + ij + "个")
                    // console.log(dirs)
                    if (fn) {
                        fn(dirs)
                    } else {
                        console.log("未设置回调")
                    }
                }
            });
        };
    doit(pathName);
}

文件数据

//通过路径获取文件对象内容
tool.prototype.$getFileData = function (data, fn = '') {
    let center = [];
    let router = data;
    if (typeof data === "string") {
        // 数据格式
        // mytool.$getFileData("../src/api/user/request/user")
        let pathName = "../api" + data.split("/api")[1];
        let fileData = require(pathName);
        //拆数组
        for (let i in fileData) {
            center.push(fileData[i])
        }
    } else {
        // 数据格式
        // [ { pathName: './src/api/user/request', fileName: 'user.js' } ]
        for (let k in router) {
            let pathName = "../api" + router[k].pathName.split("/api")[1] + "/" + router[k].fileName;
            let fileData = require(pathName);
            //拆数组
            for (let i in fileData) {
                center.push(fileData[i])
            }
        }
    }
    // 输出
    if (fn == '') {
        console.log(center)
        return center;
    } else {
        fn(center);
        return center;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻动琴弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值