小虾虎鱼

小虾虎鱼

nodejs遍历文件夹(含子文件夹)里面的所有文件

作者 禾惠 发表于 2015/07/13,最后修改于 2015/07/13

此方法主要用到了fs模块中的fs.readdirSyncfs.statSyncfs.readdirSync用来读取目录下的文件和文件夹,fs.statSync用来读取文件或文件夹的相关属性。

此方法需要用到上一篇文章讲到的link JavaScript异步仿同步(控制流)的实现

代码

/**
 * 获取文件夹下面的所有的文件(包括子文件夹)
 * @param {String} dir
 * @param {Function} callback
 * @returns {Array}
 */
 var fs = require('fs');
 var path = require('path');
exports.readfiles = function (dir, callback) {
    var filesArr = [];
    dir = path.join(dir, '/');
    (function dir(dirpath, fn) {
        var files = fs.readdirSync(dirpath);
        async(files, function (item, next) {
            var info = fs.statSync(dirpath + item);
            if (info.isDirectory()) {
                dir(dirpath + item + '/', function () {
                    next();
                });
            } else {
                filesArr.push(dirpath + item);
                callback && callback(dirpath + item);
                next();
            }
        }, function (err) {
            !err && fn && fn();
        });
    })(dir);
    return filesArr;
}

说明

该方法返回的是所有文件的路径(相对于dir),其中传入的参数callback的参数为文件的真实路径,可以通过callback来对每个文件做处理。