nodejs:遍历文件夹文件统计文件大小

Posted 飞翔梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs:遍历文件夹文件统计文件大小相关的知识,希望对你有一定的参考价值。

根据 http://blog.csdn.net/hero82748274/article/details/45700465这里的思路对读写文件做了一个 封装:

webpack在打包的时候可以借助assets-webpack-plugin插件形成全部打包文件的json map,不过因为项目需要这个生成的json不能满足我的需要,我们目前需要生成形式为以下的json文件:

{
"jsFile":{   "mainSite":"mainSite.js",   "size":"296.28/kb"
}, "cssFile":{   "mainSite":"mainSite.css",   "size":"32.76/kb" } }

  

所以用nodejs的fs module实现了这个读写文件的功能,具体如下:

var fs = require(‘fs‘);
var path = require(‘path‘);
var basePath = path.join(__dirname, ‘resources‘);
//遍历文件夹,获取所有文件夹里面的文件信息

function geFileList(folderPath,fileName)
{
    this.folderPath=folderPath; //文件夹路径
    this.fileName=fileName;
    this.filesList = [];
    //遍历读取文件
    this.readFile=function(path) {
        var filesList=this.filesList;

        var files = fs.readdirSync(path);//需要用到同步读取
        files.forEach(function(file) {
            var states = fs.statSync(path+‘/‘+file);
            if(states.isDirectory())
            {
                this.readFile(path+‘/‘+file,filesList);
            }
            else
            {
                //创建一个对象保存信息
                var obj = new Object();
                obj.size = states.size;//文件大小,以字节为单位
                obj.name = file;//文件名
                obj.path = path+‘/‘+file; //文件绝对路径
                this.filesList.push(obj);
            }
        }.bind(this));
    }

    //写入文件utf-8格式
    this.writeFile=function(data) {
        fs.writeFile(this.fileName,data,‘utf-8‘,function() {
            console.log("文件生成成功");
        });
    }
    this.formatHandler=function() {
        var filesList=this.filesList;
        var strJSON={
            "jsFile":{},
            "cssFile":{}
        };
        for(var i=0;i<filesList.length;i++)
        {
            var item = filesList[i],
                thisName=item.name,
                nameNoSuffix;

            if(/\.js$/.test(thisName)) {
                //判断是否为js文件
                nameNoSuffix=thisName.split(‘.‘)[0];
                strJSON["jsFile"][nameNoSuffix]=thisName;
                strJSON["jsFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
            }
            else if(/\.css$/.test(thisName)) {
                //判断是否为css文件
                nameNoSuffix=thisName.split(‘.‘)[0];
                strJSON["cssFile"][nameNoSuffix]=thisName;
                strJSON["cssFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
            }
        }

        var strJsonObj=JSON.stringify(strJSON);
        this.writeFile(strJsonObj);
    }
    this.init=function() {
        var that=this;
        console.log(‘test01‘);
        //判断打包的时候文件路径是否存在
        fs.exists(this.folderPath, function (exists) {
            if(exists) {
              that.readFile(that.folderPath);
              that.formatHandler();
            }
        });
    }
}

module.exports=geFileList;

 

因为我有多个项目在一起管理,需要一次性生成多个项目的json文件,所以每生成一个json文件都得实例化一个函数,比如:

//生成json map
// ask json
var askFileList=new geFileList(outputPath+"/ask",outputPath+‘/json-ask.json‘);
askFileList.init();

 

//生成json map
// web json
var askFileList=new geFileList(outputPath+"/web",outputPath+‘/json-web.json‘);
askFileList.init();

  

注明:用webpack的插件assets-webpack-plugin生成json,参考地址: https://www.npmjs.com/package/assets-webpack-plugin

    nodeJS的fs module的API: http://javascript.ruanyifeng.com/nodejs/fs.html

  



以上是关于nodejs:遍历文件夹文件统计文件大小的主要内容,如果未能解决你的问题,请参考以下文章

统计文件夹大小的函数

Java File 类 文件的常用操作(递归遍历所有文件,统计文件大小,删除文件)

Python小练习---导入os模块做一个统计文件夹大小的函数

递归统计文件夹大小

C 语言文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )

NodeJS 文件统计