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( "\n" );
   fs.writeFile(filePath+ "/" + "filelist.txt" ,data+ '\n' , 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程序设计有所帮助。

转载于:https://www.cnblogs.com/cina33blogs/p/7839135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值