nodejs实现遍历文件夹并统计文件大小

   离开公司已经有2个多个月,之前写了不少工具,但在离开公司的当天,我亲手把一年来的所有积累工具和代码都格式化了。今天想起之前在项目中遇到的一个问题,今天将其记录下来。

  我在优化内存的时候,遇到一些图片在加载的时候很难loading出现,发现一些技能图标,尺寸很小50x50,但是图片的大小却很大,有几m,于是找到路径,发现是美术输出图标的时候因为忘记压缩导致图标变得很大,所以导致加载出现不停loading现象出现。

  项目里美术文件也有几千张那么多,要一张张去找问题还真是一个体力活,当时利用空闲的时间尝试一下nodejs 文件系统的API拼凑写了一个小demo,满足了一下需求,很快找到问题所在,把有问题的图片告诉美术修改过来。这样子解决问题。

  关于这个文件统计大小是很实用,前端可以统计这些图片有针对性地较大的图片进行压缩。因为有一个数据作参考可以很方便找到问题。

  下面使用nodejs的 遍历文件夹文件内容,并且读取所有的文件,并采取排序往大到小的顺序进行输出,最后生成一个文件,这个文件已经排序好。可以看那些文件是否有文件。

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

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 的参数修改成你想要的路径,改变里面参数路径,即可以遍历文件夹的文件,并生成 一份文件。

  文件数多的时候,建议采用强大一点文本编辑器,这样方便阅读。

  下面是文件的大小

时间: 2024-10-29 20:48:27

nodejs实现遍历文件夹并统计文件大小的相关文章

nodejs实现遍历文件夹并统计文件大小_node.js

离开公司已经有2个多个月,之前写了不少工具,但在离开公司的当天,我亲手把一年来的所有积累工具和代码都格式化了.今天想起之前在项目中遇到的一个问题,今天将其记录下来. 我在优化内存的时候,遇到一些图片在加载的时候很难loading出现,发现一些技能图标,尺寸很小50x50,但是图片的大小却很大,有几m,于是找到路径,发现是美术输出图标的时候因为忘记压缩导致图标变得很大,所以导致加载出现不停loading现象出现. 项目里美术文件也有几千张那么多,要一张张去找问题还真是一个体力活,当时利用空闲的时间

php实现的遍历文件夹下所有文件,编辑删除_php技巧

复制代码 代码如下: <?php /* 遍历文件夹; 功能:(a)可删除文件 (b)可编辑文本,网页文件 (c)可删除文件夹,前提是该文件夹为空 (d)可建立文件,文件夹,修改文件夹名称; lost63.com原创, 转载请注明出处. 交流QQ:35501547 */ $path=$DOCUMENT_ROOT; $path=str_replace("/","\\",$path); //指定文件夹 $path=$path."\\"; if($

PHP遍历文件夹与文件类及处理类用法实例

  本文实例讲述了PHP遍历文件夹与文件类及处理类用法,非常具有实用价值.分享给大家供大家参考.具体方法如下: FindFile.class.php类文件用于遍历目录文件,具体代码如下: <?php /** 遍历文件夹及文件类 * Date: 2013-03-21 * Author: fdipzone * Ver: 1.0 */ class FindFile{ public $files = array(); // 存储遍历的文件 protected $maxdepth; // 搜寻深度,0表示

PHP遍历文件夹及文件类及处理类

FindFile.class.php 用于遍历目录文件 <?php /** 遍历文件夹及文件类 * Date: 2013-03-21 * Author: fdipzone * Ver: 1.0 */ class FindFile{ public $files = array(); // 存储遍历的文件 protected $maxdepth; // 搜寻深度,0表示没有限制 /* 遍历文件及文件夹 * @param String $spath 文件夹路径 * @param int $maxdep

ASP.NET2.0 遍历文件夹下所有图片

asp.net|遍历|遍历文件 1.以下目录有若干图片(都是大图片)2.在页面展现效果图 3.代码 后台代码using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;us

C++中如何深度搜索遍历文件夹

深度优先搜索遍历文件夹所有文件, 由于使用windows的函数, 必须要使用C语言; 注意字符集的问题,使用"#undef UNICODE", 屏蔽因字符集所产生的问题; 使用vector<string>存储所有文件名, 因为要递归使用, 所以需要设置为静态,返回shared_ptr的指针 代码如下: /************************************************* File: main.cpp Copyright: C.L.Wang A

改进《遍历文件夹并建成目录树》

刚刚看到VC知识库二十期中的一篇文章<遍历文件夹并建成目录树>.主要 是用一个递归函数来扫描目标文件夹,但是这个函数还存在目录层数的限制. 我写了另外一个函数,实现的结果跟上文一模一样,但消除了目录层数的限 制, 原代码与改进后的代码如下: //原来的函数原型void CFileTreeDlg::BrowseFile(int CallNum, CString strFile) { CallNum++; CFileFind ff; CString szDir = strFile; if(szDi

遍历文件夹并建成目录树

前些日子,我在做程序中遇到这样一个问题,要用树型控件快速浏览指定文 件夹中的文件,经过一番周折,终于做出来了,想到有些仁兄可能遇到和我相同 的困难,所以将我的做法写出来,希望对大家有些帮助! (本文程序运行效果图) 基本原理是用了函数的递归调用,再加入参数跟踪.我在调试程序的时候,跟踪发现:程序只有在遍历完一个目录下所有子目录后,才返回同级的目录.这 样便可以用参数的值来决定目录的层次. (1)在对话框上添加树型控件,选择Style中Has Buttons.Has Lines.Lines At

Java遍历文件夹的2种方法

A.不使用递归的方法: import java.io.File; import java.util.LinkedList; public class FileSystem { public static void main(String[] args) { long a = System.currentTimeMillis(); LinkedList list = new LinkedList(); File dir = new File("c:\\Program Files\\Java\\&q