关于javascript:递归读取Node JS中的目录

Recursivly read a directory in NodeJS

我对服务器端编程和nodejs非常陌生

我需要递归地读取一个目录来获取这个目录中每个文件的文件名(应该返回一个文件名数组(相对路径))。

我认为这是很常见的事情,所以我希望有人可以共享代码。或者告诉我正确的调用方法。谢谢


使用node dir模块的files方法可以很容易地做到这一点:

安装模块

1
npm install node-dir

那么代码就简单到

1
2
3
4
5
6
var dir = require('node-dir');

dir.files(__dirname, function(err, files) {
  if (err) throw err;
  console.log(files);
});

这将在所有子目录中重复出现,结果将是一个文件路径数组。


这是我第一枪。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fs = require('fs');

function getDirectoryFiles(directory, callback) {
  fs.readdir(directory, function(err, files) {
    files.forEach(function(file){
      fs.stat(directory + '/' + file, function(err, stats) {
        if(stats.isFile()) {
          callback(directory + '/' + file);
        }
        if(stats.isDirectory()) {
          getDirectoryFiles(directory + '/' + file, callback);
        }
      });
    });
  });
}

getDirectoryFiles('.', function(file_with_path) {
  console.log(file_with_path);
});

当然,您可以在全局数组中推送值,而不是回调处理函数中的console.log


这也可能有帮助:递归地对每个文件执行异步任务,完成后执行回调


查看loaddirhttps://npmjs.org/package/loaddir网站

npm install loaddir

1
2
3
4
5
6
7
  loaddir = require('loaddir')

  allJavascripts = []
  loaddir({
    path: __dirname + '/public/javascripts',
    callback: function(){  allJavascripts.push(this.relativePath + this.baseName); }
  })

如果需要扩展,也可以使用fileName而不是baseName