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命令行参数处理模块commander使用实例
Sep 17 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
js自定义事件代码说明
2011/01/31 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
浅谈js中的this问题
2017/08/31 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python实现批量下载图片的方法
2015/07/08 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
python实现数据写入excel表格
2018/03/25 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python绘制封闭多边形教程
2020/02/18 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
国际商务专业求职信
2014/07/15 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
四大名著读书笔记
2015/06/25 职场文书
浅谈python中的多态
2021/06/15 Python