const fs = require('fs')
const path = require('path')
// readdir promise处理
function asyncReaddir(filePath) {
    return new Promise((resolve, reject) => {
        fs.readdir(filePath, (err, file) => {
            if (err) {
                reject(err);
            }
            resolve(file)
        })
    })
}
// statpromise处理
function asyncStat(filedir) {
    return new Promise((resolve, reject) => {
        fs.stat(filedir, (err, stats) => {
            if (err) reject(err);
            resolve(stats)
        })
    })
}
function fileDispaly(filePath, callback) {
    // 读取filePath路径下所有文件和文件夹名称
    return asyncReaddir(filePath).then(files => {
        let promistList = files.map((fileName) => {
            let childFilePath = path.join(filePath, fileName)   // 获得子文件的绝对路径
            // map遍历会得到多个promise,映射成新的promise数组promistList, 之后用Promise.all处理多个promise
            return asyncStat(childFilePath).then(fileInfo => {    // 获取每个文件或文件夹的信息
                if (fileInfo.isFile()) {                              // 判断是否是文件
                    callback && callback(childFilePath)         // 是文件则执行回调函数,这里演示接受文件绝对路径
                }
                if (fileInfo.isDirectory()) {
                    return fileDispaly(childFilePath, callback)       // 递归处理文件夹
                }
            }).catch(err => {
                console.log(err)
            })
        })
        return Promise.all(promistList)     // 所有的promise处理完成
    }).catch((err) => {
        console.log(err)
    })
}
// 定义callback, 处理接受到每个文件
let fileList = []
function addFile(file) {
    if(file.indexOf('.json')===-1)return
    fileList.push(file)
}
// 用D:/test 文件夹做测试
const filePath = path.resolve('./')  
fileDispaly(filePath, addFile).then(() => {
    // 这里可以对filePath下所有文件做处理了,如计算各个文件类型的数量 或统计文件信息等等
    // console.log(fileList)
    // 将所有文件路径写入path.txt里
    let dataStr = {}
    fileList.forEach(item => {
        // 读取文件内容
        let data = fs.readFileSync(item,"utf-8")
        console.log(data)
        data = JSON.parse(data)
        Object.assign(dataStr, data)
    })
    dataStr = JSON.stringify(dataStr)
    fs.writeFile('最后生成结果.txt', dataStr, (err) => {
        if (err) {
            console.log("写入文件失败")
        } else {
            console.log('写入成功')
        }
    })
})- 本文作者: MrRetro博客
- 本文链接: http://mrretro.github.io/2022/04/21/node获取文件夹下的所有json并将其合并输出/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!

 
                    