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

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

  1. {
    "jsFile":{
  2.   "mainSite":"mainSite.js",
  3.   "size":"296.28/kb"
    },
  4. "cssFile":{
  5.   "mainSite":"mainSite.css",
  6.   "size":"32.76/kb"
  7. }
  8. }

  

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

  1. var fs = require('fs');
  2. var path = require('path');
  3. var basePath = path.join(__dirname, 'resources');
  4. //遍历文件夹,获取所有文件夹里面的文件信息
  5.  
  6. function geFileList(folderPath,fileName)
  7. {
  8. this.folderPath=folderPath; //文件夹路径
  9. this.fileName=fileName;
  10. this.filesList = [];
  11. //遍历读取文件
  12. this.readFile=function(path) {
  13. var filesList=this.filesList;
  14.  
  15. var files = fs.readdirSync(path);//需要用到同步读取
  16. files.forEach(function(file) {
  17. var states = fs.statSync(path+'/'+file);
  18. if(states.isDirectory())
  19. {
  20. this.readFile(path+'/'+file,filesList);
  21. }
  22. else
  23. {
  24. //创建一个对象保存信息
  25. var obj = new Object();
  26. obj.size = states.size;//文件大小,以字节为单位
  27. obj.name = file;//文件名
  28. obj.path = path+'/'+file; //文件绝对路径
  29. this.filesList.push(obj);
  30. }
  31. }.bind(this));
  32. }
  33.  
  34. //写入文件utf-8格式
  35. this.writeFile=function(data) {
  36. fs.writeFile(this.fileName,data,'utf-8',function() {
  37. console.log("文件生成成功");
  38. });
  39. }
  40. this.formatHandler=function() {
  41. var filesList=this.filesList;
  42. var strJSON={
  43. "jsFile":{},
  44. "cssFile":{}
  45. };
  46. for(var i=0;i<filesList.length;i++)
  47. {
  48. var item = filesList[i],
  49. thisName=item.name,
  50. nameNoSuffix;
  51.  
  52. if(/\.js$/.test(thisName)) {
  53. //判断是否为js文件
  54. nameNoSuffix=thisName.split('.')[0];
  55. strJSON["jsFile"][nameNoSuffix]=thisName;
  56. strJSON["jsFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
  57. }
  58. else if(/\.css$/.test(thisName)) {
  59. //判断是否为css文件
  60. nameNoSuffix=thisName.split('.')[0];
  61. strJSON["cssFile"][nameNoSuffix]=thisName;
  62. strJSON["cssFile"]["size"]=(item.size/1024).toFixed(2) +"/kb";
  63. }
  64. }
  65.  
  66. var strJsonObj=JSON.stringify(strJSON);
  67. this.writeFile(strJsonObj);
  68. }
  69. this.init=function() {
  70. var that=this;
  71. console.log('test01');
  72. //判断打包的时候文件路径是否存在
  73. fs.exists(this.folderPath, function (exists) {
  74. if(exists) {
  75. that.readFile(that.folderPath);
  76. that.formatHandler();
  77. }
  78. });
  79. }
  80. }
  81.  
  82. module.exports=geFileList;

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

  1. //生成json map
  2. // ask json
  3. var askFileList=new geFileList(outputPath+"/ask",outputPath+'/json-ask.json');
  4. askFileList.init();
  1. //生成json map
  2. // web json
  3. var askFileList=new geFileList(outputPath+"/web",outputPath+'/json-web.json');
  4. 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:遍历文件夹文件统计文件大小的更多相关文章

  1. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  2. Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间

    遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...

  3. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  4. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  5. linux查看当前文件夹下每个文件大小

    查看当前文件夹下每个文件大小 并会给出当前文件大小总和,后面加具体的文件名会显示具体的文件大小 ls -lht 把*换成具体的文件名会显示具体的文件大小 du -sh *

  6. C#获取文件夹/文件的大小以及占用空间 转摘自:http://www.cnblogs.com/chenpeng-dota/articles/2176470.html

    C#获取文件夹/文件的大小以及占用空间 今天,头给了个任务:写个方法,我会给你个路径,计算这个路径所占用的磁盘空间 . 然后,找了很多资料.但大部分都是获取文件夹/文件的大小的.对于占用空间的没有成品 ...

  7. java基础IO删除文件夹文件

    /** * 定义一个方法,能够删除任意文件夹,文件夹路径由键盘录入 注意:不要在C盘下做测试,请选定无用的文件夹测试! */ 1.键盘录入 private static File getfile() ...

  8. java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除

    最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索   在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...

  9. JavaSE 文件递归之删除&amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

    1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; impor ...

  10. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

随机推荐

  1. SQL Server知识详解

    1.SET NOCOUNT ON的作用: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息. 语法:SET NOCOUNT {ON | OFF} 详解:当SET ONCOUNT ...

  2. 在junit格式的结果信息中只包含错误信息的修改方法

    文件名称:suiteJunit.vm 文件路径:src\fitnesse\resources\templates 添加如下黑体部分内容: <?xml version="1.0" ...

  3. 深入探究Java中equals()和==的区别是什么

    目录 相等判断符"==" "=="判断基本类型数据 "=="判断引用类型数据 相等判断方法equals() 思考:为什么要设计equals( ...

  4. tp5 验证码功能实现

    视图层 <div class="loginbox-textbox"> <input class="form-control" placehol ...

  5. thinkphp5.0 页面缓存

    在application\config.php里加 //以下为静态缓存配置 'app_debug' => false,//false为开启静态缓存模式 'html_cache_on' => ...

  6. DataGridView DataSource 如何实现排序

    将数据绑定在下面的类中就可以实现排序 public class SortableBindingList<T> : BindingList<T> { private ArrayL ...

  7. 当项目只有src文件和web文件时eclipse如何导入javaweb工程

    原理是:利用工具生成class文件,并且在过程中检查出错误,生成对应的编译后文件,这样才能在tomcat等服务器上跑,服务器上只能跑编译后的文件. 1. 2. 3. . 4. 5. 6. 7.

  8. ebullient(2018.10.25)

    结论巨好想,每一次操作可以看作把一个b往前移一位,另一个b往后移一位,逆序对个数不改变,判断即可做第一问. 此处代码仅给出第一问做法: #include<cstdio> #include& ...

  9. 执行gulp build报错

    问题与分析 在执行gulp build报错如下: D:\coding\Resume\Resumes>gulp build gulp build[5628]: src\node_contextif ...

  10. Centos 7 在Hyper-v中安装完成后,提示密码错误

    如果提示密码错误,可能是由于密码首字母采用了大些,而caps lock似乎不能识别,因此,在需要输入大写字母的时候,按住shift即可.