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为什么选择javascript为载体语言
Jan 13 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
监控Nodejs的性能实例代码
Jul 02 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 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
ThinkPHP的L方法使用简介
2014/06/18 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python 实现return返回多个值
2019/11/19 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
数据库的约束含义
2012/09/09 面试题
图书室管理制度
2014/01/19 职场文书
刑事法律意见书
2015/06/04 职场文书
安全学习心得体会范文
2016/01/18 职场文书