Home > Web Front-end > JS Tutorial > nodejs implements traversing folders and counting file sizes_node.js

nodejs implements traversing folders and counting file sizes_node.js

WBOY
Release: 2016-05-16 15:57:28
Original
1691 people have browsed it

It has been more than 2 months since I left the company. I wrote a lot of tools before, but on the day I left the company, I personally formatted all the tools and codes I had accumulated over the past year. Today I remembered a problem I encountered in a previous project and recorded it today.

When I was optimizing the memory, I encountered some pictures that were difficult to load when loading. I found some skill icons with a small size of 50x50, but the size of the pictures was very large, several meters, so I found the path and found When outputting icons as art, I forgot to compress them and the icons became very large, which resulted in non-stop loading.

There are thousands of art files in the project, and it is really a physical job to find the problem one by one. I used my free time to try the API of the nodejs file system and wrote a small demo to meet the needs. , quickly found the problem, and told the artist to correct the problematic picture. Solve the problem this way.

It is very practical to count the size of this file. The front-end can count these pictures and compress larger pictures in a targeted manner. Because having a data as a reference makes it easy to find problems.

The following uses nodejs to traverse the folder file contents, read all files, and output them in order from large to small, and finally generate a file, which has been sorted. You can see if those files have files.

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);

Copy after login


The usage is very simple: var filesList = geFileList(“G:/nodejs”); change the parameters of getFileList to the path you want, and change the parameter path inside, that is, you can traverse the files in the folder and generate a file.

When there are many files, it is recommended to use a more powerful text editor for easier reading.

Here are the file sizes

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template