nodejs 遍历目录(文件夹)下的所有文件

nodejs 遍历目录

const path = require('path')
const fs = require('fs')
// 服务器端的jquery,用于选择字符 eg: $('.title').text(),这里没用到,写爬虫可以用到
// const chreeio = require('cheerio') 

// G:\webproject\component
const basePath = 'G:/webproject/component'

function mapDir(dir, callback, finish) {
  fs.readdir(dir, function(err, files) {
    if (err) {
      console.error(err)
      return
    }
    files.forEach((filename, index) => {
      let pathname = path.join(dir, filename)
      fs.stat(pathname, (err, stats) => { // 读取文件信息
        if (err) {
          console.log('获取文件stats失败')
          return
        }
        if (stats.isDirectory()) {
          mapDir(pathname, callback, finish)
        } else if (stats.isFile()) {
          if (['.json', '.less'].includes(path.extname(pathname))) {  // 排除 目录下的 json less 文件
            return
          }
          fs.readFile(pathname, (err, data) => {
            if (err) {
              console.error(err)
              return
            }
            callback && callback(data)
          })
          if (index === files.length - 1) {
            finish && finish()
          }
        }
      })
    })
  })
}

mapDir(
  basePath,
  function(file) {
    // console.log('TCL: file', file.toString())
    // 读取文件后的处理
  },
  function() {
    // console.log('xxx文件目录遍历完了')
  }
)

2021-12-10 更新
遍历目录下的所有文件,把文件路径和所在父目录同级返回给回调函数处理
让处理在回调中做,灵活度更高

function mapDir(dir, callback, finish) {
  fs.readdir(dir, function(err, files) {
    if (err) {
      console.error(err)
      return
    }
    // DFS
    files.forEach((filename, index) => {
      // 忽略不需要遍历的目录
      if(ignoreDir.includes(filename)) {
        return
      }
      let pathname = path.join(dir, filename)
      fs.stat(pathname, (err, stats) => { // 读取文件信息
        if (err) {
          console.log('获取文件stats失败')
          return
        }
        if (stats.isDirectory()) {
          mapDir(pathname, callback, finish)
        } else if (stats.isFile()) {
          typeof callback === 'function' && callback(files, pathname)
          if (index === files.length - 1) {
            finish && finish()
          }
        }
      })
    })
  })
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值