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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
学习python (1)
2006/10/31 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
python实现音乐下载的统计
2018/06/20 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Python实现最大子序和的方法示例
2019/07/05 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
导游实习生自荐书
2014/01/28 职场文书
运动会邀请函范文
2014/01/31 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
详解jQuery的核心函数和事件处理
2022/02/18 jQuery