• NodeJS遍历文件生产文件列表


    本文实例讲述了NodeJS遍历文件生产文件列表功能。分享给大家供大家参考,具体如下:

    功能需求:在工作中我们可能经常需要知道项目中静态文件列表发布,一个一个去检索写,那就太苦逼了。

    要想知道里面的文件列表是不是很蛋疼,可能我们也会有dos tree去获取。

    这里分享一下,通过node,知道文件路径,并配置远程路径,直接copy,发布。

    新建filelist.js 里面都有注释,我就不哆嗦了.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    var fs = require("fs");
    //path模块,可以生产相对和绝对路径
    var path = require("path");
    //配置远程路径
    var remotePath = "/resource/fd/promote/201507/qixi/";
    //获取当前目录绝对路径,这里resolve()不传入参数
    var filePath = path.resolve();
    //读取文件存储数组
    var fileArr = [];
    //读取文件目录
    fs.readdir(filePath,function(err,files){
      if(err){
        console.log(err);
        return;
      }
      var count = files.length;
      //console.log(files);
      var results = {};
      files.forEach(function(filename){
        //filePath+"/"+filename不能用/直接连接,Unix系统是”/“,Windows系统是”“
        fs.stat(path.join(filePath,filename),function(err, stats){
          if (err) throw err;
          //文件
          if(stats.isFile()){
            if(getdir(filename) == 'html'){
              var newUrl=remotePath+filename;
              fileArr.push(newUrl);
              writeFile(fileArr);
            }
            // (getdir(filename) == 'html')&&(fileArr.push(filename);writeFile(newUrl));
          //  console.log("%s is file", filename);
          }else if(stats.isDirectory()){
            // console.log("%s is a directory文件目录", filename);
             //返回指定文件名的扩展名称
             //console.log(path.extname("pp/index.html"));
             if(filename == 'css' || filename == 'images'){
    //var readurl = filePath+'/'+filename;
                 //filePath+"/"+filename不能用/直接连接,Unix系统是”/“,Windows系统是”“
               //  console.log(path.join(filePath,filename));
                 var name = filename;
                 readFile(path.join(filePath,filename),name);
             }
          }
        });
      });
    });
    //获取后缀名
    function getdir(url){
      var arr = url.split('.');
      var len = arr.length;
      return arr[len-1];
    }
    //获取文件数组
    function readFile(readurl,name){
      console.log(name);
      var name = name;
      fs.readdir(readurl,function(err,files){
        if(err){console.log(err);return;}
        files.forEach(function(filename){
         // console.log(path.join(readurl,filename));
          fs.stat(path.join(readurl,filename),function(err, stats){
            if (err) throw err;
            //是文件
            if(stats.isFile()){
              var newUrl=remotePath+name+'/'+filename;
              fileArr.push(newUrl);
              writeFile(fileArr)
            //是子目录
            }else if(stats.isDirectory()){
              var dirName = filename;
              readFile(path.join(readurl,filename),name+'/'+dirName);
              //利用arguments.callee(path.join())这种形式利用自身函数,会报错
              //arguments.callee(path.join(readurl,filename),name+'/'+dirName);
            }
          });
        });
      });
    }
    // 写入到filelisttxt文件
    function writeFile(data){
      var data = data.join(" ");
      fs.writeFile(filePath+"/"+"filelist.txt",data+' ',function(err){
        if(err) throw err;
        console.log("写入成功");
      });
    }

    当我们执行

    1
    node flielist.js

    就会生产filelist.txt,文件里面就包含了我们想要的路径。

    有时,我们通常遇到删除不了的文件,由于文件纵深太长导致 rm _rf也删不了,但是我们通过nodejs可以办到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    var fs = require("fs");
    var path = require("path");
    deleteFolderRecursive = function(url) {
      var files = [];
      //判断给定的路径是否存在
      if( fs.existsSync(url) ) {
        //返回文件和子目录的数组
        files = fs.readdirSync(url);
        files.forEach(function(file,index){
          // var curPath = url + "/" + file;
          var curPath = path.join(url,file);
          //fs.statSync同步读取文件夹文件,如果是文件夹,在重复触发函数
          if(fs.statSync(curPath).isDirectory()) { // recurse
            deleteFolderRecursive(curPath);
          // 是文件delete file 
          } else {
            fs.unlinkSync(curPath);
          }
        });
        fs.rmdirSync(url);
      }else{
        console.log("给定的路径不存在,请给出正确的路径");
      }
    };
    deleteFolderRecursive("./grunt");

    希望本文所述对大家nodejs程序设计有所帮助。

  • 相关阅读:
    设计模式总结——程序猿武功秘籍(下一个)
    easyui datagrid显示进度条控制操作
    使用CountDownLatch和CyclicBarrier处理并发线程
    人类探索地外文明显著取得的进展
    Linux 启动过程的详细解释
    不会跳回到微博认定申请书
    unix域套接字UDP网络编程
    VS SQL 出现%CommonDir%dte80a.olb 该解决方案
    数据仓库与数据挖掘的一些基本概念
    CheckBoxPreference组件
  • 原文地址:https://www.cnblogs.com/cina33blogs/p/7839135.html
Copyright © 2020-2023  润新知