如何在数组nodejs中添加某种类型的所有文件?

时间:2011-12-31 09:39:21

标签: node.js

我正在遍历文件夹及其子文件夹并尝试将所有.jss文件添加到数组中:

function getJssFromDir(directory,arr) {
    fs.stat(directory,function (err, stats) {
        if (stats.isFile()) {
            //check if its jss file
            if (path.extname(directory) === '.jss') {
                arr.push(directory);
            }
        } else if (stats.isDirectory()) {
            fs.readdir(directory, function(err, files) {
                if (err) throw err;
                for (var i=0; i<files.length; i++) {
                    getJssFromDir(directory+'/'+files[i],arr);
                }
            });
        }
    }); 
}

然后尝试打印它,我什么也看不见:

var array = [];
getJssFromDir('c:/internet',array);
console.log(array);

当我尝试在getJssFromDIR中打印数组时,我做错了什么我看到我要添加的所有文件都被添加到数组中。

1 个答案:

答案 0 :(得分:1)

当您读取目录时,您正在读取磁盘。这需要时间。在node.js中,IO操作的任何时间都会进行回调,因为它不会立即执行。

您需要在getJssFromDir功能中添加回调,然后通过回调来调用它。

但是由于您正在进行递归调用,因此管理所有回调会变得复杂。我已经针对这种情况制作了许多图书馆,我建议findit

var array = [];
var finder = require('findit').find('c:/internet');

finder.on('file', function(file) {
  if (path.extname(directory) === '.jss') {
    array.push(file);
  }
});

finder.on('end', function() {
  console.log(array);
});