node.js遍历指定文件下所有文件
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) { fileList.push(file) } // 用D:/test 文件夹做测试 const filePath = path.resolve('D:\\test') fileDispaly(filePath, addFile).then(() => { // 这里可以对filePath下所有文件做处理了,如计算各个文件类型的数量 或统计文件信息等等 // console.log(fileList) // 将所有文件路径写入path.txt里 let dataStr = '' fileList.forEach(item => { dataStr += `${item} \n` }) fs.writeFile('path.txt', dataStr, (err) => { if (err) { console.log("写入文件失败") } else { console.log('写入成功') } }) })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构