nodejs循环创建&读取文件夹

578 阅读1分钟

nodejs循环创建文件夹

1、for循环版本

const path = require('path');
const fs = require('fs');
const mkDir = (dirPath) =>{
  return new Promise((resolve,reject)=>{
    const pathArr = dirPath.split('/');
    const pathLen = pathArr.length -1;
    var endPath = [];
    const flag = true; // 创建是否有报错
    for(var i = 0; i <  pathArr.length; i++) {
      let currentPath = pathArr[i];
      endPath.push(currentPath);
      let targetPath = path.join(process.cwd(), './' + endPath.join('/'));
      fs.access(targetPath,err =>{
        if(err) {
          fs.mkdir(targetPath,err =>{
            if(err) {
              flag = false;
              console.log('err',err,)
              reject(err)
              return
            }
          })
        };
        if(i === pathLen) { 
           // 整体创建完成
          resolve(true)
        }
      });
      // 每次创建文件夹后,判断此次创建是否成功,还是报错,如果报错,则结束整体的创建循环
      if(!flag) {
        break;
      }
    };
  })
}

// mkDir('src/component')
mkDir('./src/component2')
mkDir('./src/component/component1')

2、递归版本

const path = require('path');
const fs = require('fs');
const mkDir = (dirPath) => {
  const dirName = dirPath; 
  // console.log(dirPath,path.parse(dirPath))
  if(fs.existsSync(dirName)) {
    return true;
  }else {
    if(mkDir(path.dirname(dirName))) {
      fs.mkdirSync(dirName);
      return true;
    }
  }

};
// mkDir('src/component')
// mkDir('./src/component2')
mkDir('./src/component/component1')

3、循环读取

function readFileList(dir, collectObj) {

  let {

    filesList,

    dirsList,

  } = collectObj

  const files = fs.readdirSync(dir);

  files.forEach((item, index) => {

    var fullPath = path.join(dir, item);

    const stat = fs.statSync(fullPath);

    if (stat.isDirectory()) {

      dirsList.push(fullPath);

      readFileList(path.join(dir, item), collectObj); //递归读取文件

    } else {

      filesList.push(fullPath);

    }

  });

  return collectObj;


}