nodejs遍历一个目录下所有的文件

    这个问题是我在实际中遇到的,意思很明确,一个目录下可能还嵌套子目录,我需要遍历出该目录下所有的文件,其实思路很简单,就是利用递归的思路,定义一个函数,传入一个目录路径参数,开始遍历该目录下的文件,如果遇到的是目录,则继续调用该函数,直到所有的目录遍历完成,结束。

    这里有个问题,就是我们需要通过这个函数得到所有的文件,而不仅仅是遍历一遍。遍历很好做,但是要通过这个函数返回一个数组,数组中就是所有的文件,这就有点麻烦了。遍历目录就是需要调用fs.readdirSync(path)函数。判断文件是目录还是文件,需要调用fs.statSync(path)。

    因为这里有递归调用,就是函数内部调用函数本身,所以函数本身的返回值很重要,思路可以这样,我们声明一个全局的数组,遍历的过程中,如果是文件就往数组中增加,如果是目录,则继续调用函数,直到所有目录遍历完成,数组就是我们要返回的结果。

var fs = require("fs");
var path = require("path");
var list = [];
function listFile(dir){
	var arr = fs.readdirSync(dir);
	arr.forEach(function(item){
		var fullpath = path.join(dir,item);
		var stats = fs.statSync(fullpath);
		if(stats.isDirectory()){
			listFile(fullpath);
		}else{
			list.push(fullpath);
		}
	});
	return list;
}

var res = listFile("D:/tools/eclipse2019/workspaces/webapp");
console.log(res);

    这种办法是可以得到结果的,但是有个问题是,我们需要定义一个全局的数组,最后返回。如果这个方法是公用的,我们怎么办呢?显然这个数组不能定义在函数体内,作为局部变量。否则在递归的时候,数组就发生了改变。其实问题在于,我们进行递归调用的时候,还需要把这个数组带入到函数中,这样,可以利用一个参数把数组带入,最后返回这个数组,初始数组默认为空[]。经过改变的函数如下所示:

    nodejs遍历一个目录下所有的文件_第1张图片 

    这样定义的方法就可以做到公用,我们可以暴露出去,给其他函数调用。 

 

你可能感兴趣的:(web)