NodeJS遍历文件生产文件列表功能示例


Posted in NodeJs onJanuary 22, 2017

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

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

NodeJS遍历文件生产文件列表功能示例

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

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

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

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("写入成功");
  });
}

当我们执行

node flielist.js

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

NodeJS遍历文件生产文件列表功能示例

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

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程序设计有所帮助。

NodeJs 相关文章推荐
nodejs win7下安装方法
May 24 NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 #NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 #NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 #NodeJs
简单实现nodejs上传功能
Jan 14 #NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 #NodeJs
NodeJS实现客户端js加密
Jan 09 #NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 #NodeJs
You might like
php相当简单的分页类
2008/10/02 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
document.forms用法示例介绍
2014/06/26 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
js实现抽奖功能
2020/11/24 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python3标准库总结
2019/02/19 Python
python批量解压zip文件的方法
2019/08/20 Python
Python银行系统实战源码
2019/10/25 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
Unix如何添加新的用户
2014/08/20 面试题
铣床操作工岗位职责
2014/06/13 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
公司停电通知
2015/04/15 职场文书
2015年小学财务工作总结
2015/07/20 职场文书