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命令行参数处理模块commander使用实例
Sep 17 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
详解nodejs内置模块
May 06 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
php workerman定时任务的实现代码
2018/12/23 PHP
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
如何卸载python插件
2020/07/08 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
护理不良事件检讨书
2014/02/06 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
初三毕业评语
2014/12/26 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
学生病假条怎么写
2015/08/17 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
MySQL派生表联表查询实战过程
2022/03/20 MySQL
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android