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中转换URL字符串与查询字符串详解
Nov 26 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 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实现今天是星期几的几种写法
2013/09/26 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
python按比例随机切分数据的实现
2019/07/11 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
经济管理专业毕业生推荐信
2013/11/11 职场文书
社团招新策划书
2014/02/04 职场文书
副董事长岗位职责
2014/04/02 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
2015年公司新年寄语
2014/12/08 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
600字作文之感受大自然
2019/11/27 职场文书