nodejs實現(xiàn)遍歷文件夾并統(tǒng)計文件大小
離開公司已經(jīng)有2個多個月,之前寫了不少工具,但在離開公司的當天,我親手把一年來的所有積累工具和代碼都格式化了。今天想起之前在項目中遇到的一個問題,今天將其記錄下來。
我在優(yōu)化內(nèi)存的時候,遇到一些圖片在加載的時候很難loading出現(xiàn),發(fā)現(xiàn)一些技能圖標,尺寸很小50x50,但是圖片的大小卻很大,有幾m,于是找到路徑,發(fā)現(xiàn)是美術輸出圖標的時候因為忘記壓縮導致圖標變得很大,所以導致加載出現(xiàn)不停loading現(xiàn)象出現(xiàn)。
項目里美術文件也有幾千張那么多,要一張張去找問題還真是一個體力活,當時利用空閑的時間嘗試一下nodejs 文件系統(tǒng)的API拼湊寫了一個小demo,滿足了一下需求,很快找到問題所在,把有問題的圖片告訴美術修改過來。這樣子解決問題。
關于這個文件統(tǒng)計大小是很實用,前端可以統(tǒng)計這些圖片有針對性地較大的圖片進行壓縮。因為有一個數(shù)據(jù)作參考可以很方便找到問題。
下面使用nodejs的 遍歷文件夾文件內(nèi)容,并且讀取所有的文件,并采取排序往大到小的順序進行輸出,最后生成一個文件,這個文件已經(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)建一個對象保存信息 var obj = new Object(); obj.size = states.size;//文件大小,以字節(jié)為單位 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 的參數(shù)修改成你想要的路徑,改變里面參數(shù)路徑,即可以遍歷文件夾的文件,并生成 一份文件。
文件數(shù)多的時候,建議采用強大一點文本編輯器,這樣方便閱讀。
下面是文件的大小
相關文章
nodejs個人博客開發(fā)第五步 分配數(shù)據(jù)
這篇文章主要為大家詳細介紹了nodejs個人博客開發(fā)的分配數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04node.js報錯:npm?ERR?code?EPERM的解決過程
在學習vue+typescript的時候突然發(fā)現(xiàn)了個錯誤,所以下面這篇文章主要給大家介紹了關于node.js報錯:npm?ERR?code?EPERM的詳細解決過程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08Node.js中Request模塊處理HTTP協(xié)議請求的基本使用教程
這篇文章主要介紹了Node.js中Request模塊處理HTTP請求的基本使用教程,request也支持OAuth的簽名請求,很好很強大,需要的朋友可以參考下2016-03-03Node.js+ES6+dropload.js實現(xiàn)移動端下拉加載實例
這個demo服務由Node搭建服務、下拉加載使用插件dropload,數(shù)據(jù)渲染應用了ES6中的模板字符串。有興趣的小伙伴可以自己嘗試下2017-06-06從零開始學習Node.js系列教程一:http get和post用法分析
這篇文章主要介紹了從零開始學習Node.js系列教程一:http get和post用法,結(jié)合具體實例形式分析了nodejs中get與post請求的使用方法與相關注意事項,需要的朋友可以參考下2017-04-04node.js中的http.response.getHeader方法使用說明
這篇文章主要介紹了node.js中的http.response.getHeader方法使用說明,本文介紹了http.response.getHeader的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12