nodejs實(shí)現(xiàn)遍歷文件夾并統(tǒng)計(jì)文件大小
離開(kāi)公司已經(jīng)有2個(gè)多個(gè)月,之前寫(xiě)了不少工具,但在離開(kāi)公司的當(dāng)天,我親手把一年來(lái)的所有積累工具和代碼都格式化了。今天想起之前在項(xiàng)目中遇到的一個(gè)問(wèn)題,今天將其記錄下來(lái)。
我在優(yōu)化內(nèi)存的時(shí)候,遇到一些圖片在加載的時(shí)候很難loading出現(xiàn),發(fā)現(xiàn)一些技能圖標(biāo),尺寸很小50x50,但是圖片的大小卻很大,有幾m,于是找到路徑,發(fā)現(xiàn)是美術(shù)輸出圖標(biāo)的時(shí)候因?yàn)橥泬嚎s導(dǎo)致圖標(biāo)變得很大,所以導(dǎo)致加載出現(xiàn)不停loading現(xiàn)象出現(xiàn)。
項(xiàng)目里美術(shù)文件也有幾千張那么多,要一張張去找問(wèn)題還真是一個(gè)體力活,當(dāng)時(shí)利用空閑的時(shí)間嘗試一下nodejs 文件系統(tǒng)的API拼湊寫(xiě)了一個(gè)小demo,滿足了一下需求,很快找到問(wèn)題所在,把有問(wèn)題的圖片告訴美術(shù)修改過(guò)來(lái)。這樣子解決問(wèn)題。
關(guān)于這個(gè)文件統(tǒng)計(jì)大小是很實(shí)用,前端可以統(tǒng)計(jì)這些圖片有針對(duì)性地較大的圖片進(jìn)行壓縮。因?yàn)橛幸粋€(gè)數(shù)據(jù)作參考可以很方便找到問(wèn)題。
下面使用nodejs的 遍歷文件夾文件內(nèi)容,并且讀取所有的文件,并采取排序往大到小的順序進(jìn)行輸出,最后生成一個(gè)文件,這個(gè)文件已經(jīng)排序好。可以看那些文件是否有文件。
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
{
//創(chuàng)建一個(gè)對(duì)象保存信息
var obj = new Object();
obj.size = states.size;//文件大小,以字節(jié)為單位
obj.name = file;//文件名
obj.path = path+'/'+file; //文件絕對(duì)路徑
filesList.push(obj);
}
}
}
//寫(xiě)入文件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);
使用方法很簡(jiǎn)單:將 var filesList = geFileList(“G:/nodejs”); 將getFileList 的參數(shù)修改成你想要的路徑,改變里面參數(shù)路徑,即可以遍歷文件夾的文件,并生成 一份文件。
文件數(shù)多的時(shí)候,建議采用強(qiáng)大一點(diǎn)文本編輯器,這樣方便閱讀。
下面是文件的大小

相關(guān)文章
使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎
這篇文章主要給大家介紹了關(guān)于如何使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
nodejs個(gè)人博客開(kāi)發(fā)第五步 分配數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開(kāi)發(fā)的分配數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
node.js報(bào)錯(cuò):npm?ERR?code?EPERM的解決過(guò)程
在學(xué)習(xí)vue+typescript的時(shí)候突然發(fā)現(xiàn)了個(gè)錯(cuò)誤,所以下面這篇文章主要給大家介紹了關(guān)于node.js報(bào)錯(cuò):npm?ERR?code?EPERM的詳細(xì)解決過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Node.js中Request模塊處理HTTP協(xié)議請(qǐng)求的基本使用教程
這篇文章主要介紹了Node.js中Request模塊處理HTTP請(qǐng)求的基本使用教程,request也支持OAuth的簽名請(qǐng)求,很好很強(qiáng)大,需要的朋友可以參考下2016-03-03
Node.js+ES6+dropload.js實(shí)現(xiàn)移動(dòng)端下拉加載實(shí)例
這個(gè)demo服務(wù)由Node搭建服務(wù)、下拉加載使用插件dropload,數(shù)據(jù)渲染應(yīng)用了ES6中的模板字符串。有興趣的小伙伴可以自己嘗試下2017-06-06
使用Node.js實(shí)現(xiàn)遍歷文件夾下所有文件
在使用Node.js處理文件或文件夾時(shí),我們有時(shí)需要遍歷文件夾中的所有文件和子文件夾以查找特定的文件或執(zhí)行某些操作,這里將提供一些基本的例子來(lái)演示如何使用Node.js遍歷文件夾,需要的朋友可以參考下2023-08-08
Node.js開(kāi)發(fā)第三方微信公眾平臺(tái)
這篇文章主要介紹了Node.js開(kāi)發(fā)第三方微信公眾平臺(tái)的相關(guān)資料,需要的朋友可以參考下2017-06-06
從零開(kāi)始學(xué)習(xí)Node.js系列教程一:http get和post用法分析
這篇文章主要介紹了從零開(kāi)始學(xué)習(xí)Node.js系列教程一:http get和post用法,結(jié)合具體實(shí)例形式分析了nodejs中g(shù)et與post請(qǐng)求的使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
node.js中的http.response.getHeader方法使用說(shuō)明
這篇文章主要介紹了node.js中的http.response.getHeader方法使用說(shuō)明,本文介紹了http.response.getHeader的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12

