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入门详解(多篇文章结合)
Mar 07 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 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
漂亮但不安全的CTB
2006/10/09 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
小小聊天室Python代码实现
2016/08/17 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
python和c语言的主要区别总结
2019/07/07 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
材料成型专业个人求职信范文
2013/09/25 职场文书
作风建设演讲稿
2014/05/23 职场文书
合作协议书模板2014
2014/09/26 职场文书
项目建议书
2015/02/04 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB
ubuntu下常用apt命令介绍
2022/06/05 Servers