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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 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获取目标函数执行时间示例
2014/03/04 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
php正则表达式学习笔记
2015/11/13 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
js 数组操作代码集锦
2009/04/28 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
jquery延迟对象解析
2016/10/26 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
了解ESlint和其相关操作小结
2018/05/21 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Python requests库用法实例详解
2018/08/14 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
Android interview questions
2016/12/25 面试题
一套带网友答案的.NET笔试题
2016/12/06 面试题
新闻学专业应届生求职信
2013/11/08 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
活动总结报告范文
2014/05/04 职场文书
2014年管理工作总结
2014/11/22 职场文书
2014年节能工作总结
2014/12/18 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python