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 Express框架中处理404页面一个方式
May 28 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
配置nodejs环境的方法
May 13 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 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
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
Javascript Objects详解
2014/09/04 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
启动targetcli时遇到错误解决办法
2017/10/26 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
总经理助理岗位职责
2013/11/08 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
电子信息工程自荐信
2014/05/26 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
政风行风评议心得体会
2014/10/21 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
立项申请报告范本
2015/05/15 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
会计做账心得体会
2016/01/22 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
vue组件vue-esign实现电子签名
2022/04/21 Vue.js