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中的非阻塞方法介绍
Jun 05 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
Nodejs搭建wss服务器教程
May 24 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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来处理多个提交任务
2008/05/08 PHP
php 文件上传实例代码
2012/04/19 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
Javascript MD4
2006/12/20 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
jQuery.form.js的使用详解
2017/06/14 jQuery
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
Python实现的归并排序算法示例
2017/11/21 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
九年级历史教学反思
2014/01/27 职场文书
2014年会计工作总结
2014/11/27 职场文书
音乐剧猫观后感
2015/06/04 职场文书
谢师宴家长致辞
2015/07/27 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python