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实用示例 缩址还原
Dec 28 NodeJs
用nodejs实现PHP的print_r函数代码
Mar 14 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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函数
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
PHP简单日历实现方法
2016/07/20 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
Js获取事件对象代码
2010/08/05 Javascript
JavaScript中获取元素索引的函数
2010/09/10 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
常用DOM整理
2015/06/16 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
幼儿园教育教学反思
2014/01/31 职场文书
大学生就业意向书范文
2014/04/01 职场文书
大学自主招生推荐信
2014/05/10 职场文书
中学推普周活动总结
2015/05/07 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
golang日志包logger的用法详解
2021/05/05 Golang