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

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

     

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值