nodejs实现遍历文件夹并统计文件大小


Posted in NodeJs onMay 28, 2015

离开公司已经有2个多个月,之前写了不少工具,但在离开公司的当天,我亲手把一年来的所有积累工具和代码都格式化了。今天想起之前在项目中遇到的一个问题,今天将其记录下来。

我在优化内存的时候,遇到一些图片在加载的时候很难loading出现,发现一些技能图标,尺寸很小50x50,但是图片的大小却很大,有几m,于是找到路径,发现是美术输出图标的时候因为忘记压缩导致图标变得很大,所以导致加载出现不停loading现象出现。

项目里美术文件也有几千张那么多,要一张张去找问题还真是一个体力活,当时利用空闲的时间尝试一下nodejs 文件系统的API拼凑写了一个小demo,满足了一下需求,很快找到问题所在,把有问题的图片告诉美术修改过来。这样子解决问题。

关于这个文件统计大小是很实用,前端可以统计这些图片有针对性地较大的图片进行压缩。因为有一个数据作参考可以很方便找到问题。

下面使用nodejs的 遍历文件夹文件内容,并且读取所有的文件,并采取排序往大到小的顺序进行输出,最后生成一个文件,这个文件已经排序好。可以看那些文件是否有文件。

var fs = require('fs')


//遍历文件夹,获取所有文件夹里面的文件信息
/*
 * @param path 路径
 *
 */

function geFileList(path)
{
 var filesList = [];
 readFile(path,filesList);
 return filesList;
}

//遍历读取文件
function readFile(path,filesList)
{
 files = fs.readdirSync(path);//需要用到同步读取
 files.forEach(walk);
 function walk(file)
 { 
  states = fs.statSync(path+'/'+file);   
  if(states.isDirectory())
  {
   readFile(path+'/'+file,filesList);
  }
  else
  { 
   //创建一个对象保存信息
   var obj = new Object();
   obj.size = states.size;//文件大小,以字节为单位
   obj.name = file;//文件名
   obj.path = path+'/'+file; //文件绝对路径
   filesList.push(obj);
  }  
 }
}

//写入文件utf-8格式
function writeFile(fileName,data)
{ 
 fs.writeFile(fileName,data,'utf-8',complete);
 function complete()
 {
  console.log("文件生成成功");
 } 
}


var filesList = geFileList("G:/nodejs");
filesList.sort(sortHandler);
function sortHandler(a,b)
{
 if(a.size > b.size)
 return -1;
 else if(a.size < b.size) return 1
 return 0;
}
var str='';
for(var i=0;i<filesList.length;i++)
{
 var item = filesList[i];
 var desc ="文件名:"+item.name + " "
  +"大小:"+(item.size/1024).toFixed(2) +"/kb"+" "
  +"路径:"+item.path;
 str+=desc +"\n"
}


writeFile("test.txt",str);

使用方法很简单:将 var filesList = geFileList(“G:/nodejs”); 将getFileList 的参数修改成你想要的路径,改变里面参数路径,即可以遍历文件夹的文件,并生成 一份文件。

文件数多的时候,建议采用强大一点文本编辑器,这样方便阅读。

下面是文件的大小

nodejs实现遍历文件夹并统计文件大小

NodeJs 相关文章推荐
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 NodeJs
nodejs实现获取某宝商品分类
May 28 #NodeJs
Nodejs实现批量下载妹纸图
May 28 #NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 #NodeJs
浅谈NodeJS中require路径问题
May 07 #NodeJs
NodeJs中的VM模块详解
May 06 #NodeJs
nodejs简单实现中英文翻译
May 04 #NodeJs
nodejs调用cmd命令实现复制目录
May 04 #NodeJs
You might like
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
你的自行车健身专家:FaFit24
2016/11/16 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
信息合作协议书
2014/10/09 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书