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

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

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

下面是文件的大小

(0)

相关推荐

  • NodeJs读取JSON文件格式化时的注意事项

    进行NodeJs开发时偶然发现的一个雷点 正常情况下从JSON文件读取到字符后再通过JSON.parse没什么问题,只要格式不出错 有时在确保JSON格式正确时仍然会出现unexpected token异常 经过调查发现里面有不会显示的unicode字符 于是确定是UTF-8的问题,utf-8分有dom版和无dom版,一般编辑器不刻意设置会默认保存为带dom的utf8 解决办法是先将读到的文件转成二进制,然后检索dom符号删除 代码实现部分 function readText(pathname)

  • nodejs 实现模拟form表单上传文件

    以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的时间长了点),分享之. 代码及测试用例: var http = require('http'); var path = require('path'); var fs = require('fs'); function postFile(fileKeyValue, req) { var boundaryKey = Math.random().toString(16);

  • nodejs文件操作模块FS(File System)常用函数简明总结

    件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称和形式,应该是起源于C语言的. 复制代码 代码如下: fs.open(文件路径,读写标识,[文件mode值,666],回调函数(err,文件句柄fd));          fs.read(文件句柄fd,被写入的buffer,offset,length,position,回调函数(err, byte

  • Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

    关于nodejs读取中文文件真是折腾了不少时间,网上各种方案,最后没有一个适用我,好在解决了. 下面的三个知识点都是从项目中抽出的,要单独运行脚本的话需要用全局模式来安装模块,比如安装中文转换模块(后续其它的也需要这么做): 复制代码 代码如下: npm install -g iconv-lite npm install -g nodemailer npm install -g node-schedule 1.nodejs读取中文文件编码问题 准备一个文本文件(当然也可以是csv文件等)test

  • 实例详解Nodejs 保存 payload 发送过来的文件

    1:接受文件 http://stackoverflow.com/questions/24610996/how-to-get-uploaded-file-in-node-js-express-app-using-angular-file-upload 可以用下列的第三方库 •busboy and connect-busboy •multiparty and connect-multiparty •formidable •multer 2:保存文件 ps:nodejs get/request 灌水评

  • 浅谈Nodejs应用主文件index.js

    前言 经过之前的文章 <浅谈Nodejs应用的主文件index.js的组成部分> ,终于认识了 Node 妹子的容颜,然后好像上呀<( ̄︶ ̄)>.呦西~这次让本屌在她胴体上游走一番,想想也是不错滴.嗯哼,YY到此为止. 正文 这篇文章主要以组成部分为单位了解一下 index.js 这个主文件...皮肤有多滑( ̄▽ ̄)~ 既然之前说过了index.js的组成部分,那么这次就一个组一个组的说.没错!本帅的手,怎么能放过你的每一寸肌肤! 一.引入依赖模块 嗯..就像这样: var exp

  • NodeJS Web应用监听sock文件实例

    像 NodeJS 写的 TCP 服务可以监听在某个 sock 文件(Domain Socket) 上,它的 HTTP 服务也能这么干.虽然作为 HTTP 服务连接某个 sock 文件的意义不大,所以这里只算是一个纯粹的尝试. TCP 服务是这样写 复制代码 代码如下: var net = require('net'); net.createServer(function (socket) {   socket.on('data', function (data) {     socket.wri

  • nodejs批量修改文件编码格式

    摘要: 最近在制作手册的时候遇到了一个问题'文档乱码',查看文件之后发现文件编码不对,总共100多个文件,如果用编辑器另存为utf8,那就悲催了.所以自己就写了个程序,批量修改文件编码格式. 代码: 复制代码 代码如下: /**  * 修改文件编码格式,例如:GBK转UTF8  * 支持多级目录  * @param {String} [root_path] [需要进行转码的文件路径]  * @param {Array}  [file_type] [需要进行转码的文件格式,比如html文件]  *

  • NodeJS使用formidable实现文件上传

    最近自学了一下NodeJS,然后做了一个小demo,实现歌曲的添加.修改.播放和删除的功能,其中自然要实现音乐和图片的上传功能.于是上网查找资料,找到了一个formidable插件,该插件可以很好的实现文件的上传功能.该小demo用到了MySQL数据库,所有的数据都存放到了数据库中.下面简单说一些如何使用. 1.创建app.js主文件 const express = require('express'); const router = require('./router'); const pat

  • Nodejs如何复制文件

    前端童鞋都知道,javascript是没有权限操作磁盘文件的,server童鞋一向都很鄙视.但是nodejs可谓让咱们前端扬眉吐气啊,最近在学node,其强大的功能让人异常激动和兴奋.今天就学习了它怎么读写文件. 首先需要引入fs模块,这是nodejs自带的. var fs=require("fs"); 具体可参考Nodejs API:http://www.w3cfuns.com/tools.php?mod=booknodejs 主要用到了两个方法: 1.fs.readFile(fil

  • NodeJS遍历文件生产文件列表功能示例

    本文实例讲述了NodeJS遍历文件生产文件列表功能.分享给大家供大家参考,具体如下: 功能需求:在工作中我们可能经常需要知道项目中静态文件列表发布,一个一个去检索写,那就太苦逼了. 要想知道里面的文件列表是不是很蛋疼,可能我们也会有dos tree去获取. 这里分享一下,通过node,知道文件路径,并配置远程路径,直接copy,发布. 新建filelist.js 里面都有注释,我就不哆嗦了. var fs = require("fs"); //path模块,可以生产相对和绝对路径 va

  • NodeJS学习笔记之FS文件模块

    一,开篇分析 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.可以通过调用 require("fs") 来获取该模块.文件系统模块中的所有方法均有异步和同步版本. (1),文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参. (2),回调函数的构成由调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息. (3),如果异步操作执行正确并返回,该错误形参则为null或者undefined.如果使用的是同步版本的操作方法,一旦出现错误

  • NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用webstom 运行该项目,通过app.js启动项目,如果提示找不到node.exe执行环境,请指定好你的node.exe安装位置.这里我用的express框架是3.21.2版本. 我们来简单介绍下拖拽效果是怎么实现的. 这里先看代码: <!DOCTYPE html> <html lang=

随机推荐