NodeJS 递归读取包含文件夹的目录

l0oc07j2  于 2023-01-08  发布在  Node.js
关注(0)|答案(1)|浏览(183)

我一直在尝试用fs模块请求递归读取目录。我遇到了一些问题,它只给了我一个文件名。下面是我需要的:

  • 文件名。
  • 和该文件的目录。这个结果可以是一个对象,也可以是一个数组。

有人帮忙吗。谢谢。

abithluo

abithluo1#

这是一个递归的解决方案,你可以测试它,把它保存在一个文件中,运行node yourfile.js /the/path/to/traverse

const fs = require('fs');
const path = require('path');
const util = require('util');

const traverse = function(dir, result = []) {
    
    // list files in directory and loop through
    fs.readdirSync(dir).forEach((file) => {
        
        // builds full path of file
        const fPath = path.resolve(dir, file);
        
        // prepare stats obj
        const fileStats = { file, path: fPath };

        // is the file a directory ? 
        // if yes, traverse it also, if no just add it to the result
        if (fs.statSync(fPath).isDirectory()) {
            fileStats.type = 'dir';
            fileStats.files = [];
            result.push(fileStats);
            return traverse(fPath, fileStats.files)
        }

        fileStats.type = 'file';
        result.push(fileStats);
    });
    return result;
};

console.log(util.inspect(traverse(process.argv[2]), false, null));

输出如下所示:

[
  {
    file: 'index.js',
    path: '/stackoverflow/test-class/index.js',
    type: 'file'
  },
  {
    file: 'message.js',
    path: '/stackoverflow/test-class/message.js',
    type: 'file'
  },
  {
    file: 'somefolder',
    path: '/stackoverflow/test-class/somefolder',
    type: 'dir',
    files: [{
      file: 'somefile.js',
      path: '/stackoverflow/test-class/somefolder/somefile.js',
      type: 'file'
    }]
  },
  {
    file: 'test',
    path: '/stackoverflow/test-class/test',
    type: 'file'
  },
  {
    file: 'test.c',
    path: '/stackoverflow/test-class/test.c',
    type: 'file'
  }
]

相关问题