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打包工具整合到鼠标右键的方法
May 11 NodeJs
nodejs读取memcache示例分享
Jan 02 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
nodejs中的异步编程知识点详解
Jan 17 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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
一个简单计数器的源代码
2006/10/09 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Python入门篇之编程习惯与特点
2014/10/17 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
详解python:time模块用法
2019/03/25 Python
Python实战之制作天气查询软件
2019/05/14 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
会计工作决心书
2014/03/11 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
多人股份制合作协议书
2016/03/19 职场文书