当前位置: 首页 > 面试题库 >

在JavaScript中获取文件夹和文件列表的最佳方法

弘靖琪
2023-03-14
问题内容

我正在使用node-webkit,并试图让用户选择一个文件夹,然后返回该文件夹的目录结构并递归获取其子级。

我已经用这个代码(在Angular Controller中)相当简单地工作了。

var fs = require('fs');

$scope.explorer=[];
$scope.openFile = function(){
    $scope.explorer = [tree_entry($scope.path)];    
    get_folder($scope.path, $scope.explorer[0].children);
};

function get_folder(path, tree){
    fs.readdir(path, function(err,files){
        if (err) return console.log(err);

        files.forEach( function (file,idx){
            tree.push(tree_entry(file));
            fs.lstat(path+'/'+file,function(err,stats){
                if(err) return console.log(err);
                if(stats.isDirectory()){
                    get_folder(path+'/'+file,tree[idx].children);
                }
            });
        });
    });
    console.log($scope.explorer);

    return;
}

function tree_entry(entry){
    return { label : entry, children: []}
}

取一个中等大小的文件夹,其中包含22个子文件夹,深度约为4层,这需要几分钟的时间来获取整个目录结构。

我在这里显然做错了什么吗?看到我正在使用内置的Node fs方法,我简直不敢花这么长时间。还是有一种方法可以获取目录的全部内容,而又无需触摸每个文件?

我将要能够在整个树的整个文件名上使用Angular过滤器,也可能在内容上使用Angular过滤器,因此延迟处理整个树不可能是可行的解决方案。


问题答案:

在我的项目中,我使用此功能获取大量文件。这非常快(require("FS")可以加快速度):

var _getAllFilesFromFolder = function(dir) {

    var filesystem = require("fs");
    var results = [];

    filesystem.readdirSync(dir).forEach(function(file) {

        file = dir+'/'+file;
        var stat = filesystem.statSync(file);

        if (stat && stat.isDirectory()) {
            results = results.concat(_getAllFilesFromFolder(file))
        } else results.push(file);

    });

    return results;

};

用法很明确:

_getAllFilesFromFolder(__dirname + "folder");


 类似资料:
  • 问题内容: 我在文档文件夹中获取文件名的代码有什么问题? 我以为我已正确阅读了文档,并且我对documents文件夹中的内容非常确定,但是“ fileList”没有显示任何内容?“目录”显示文件夹的路径。 问题答案: 此解决方案适用于 Swift 4 (Xcode 9.2)和 Swift 5 (Xcode 10.2.1+): 这是一个可重用的FileManager扩展,它还允许您跳过或在结果中包含

  • 问题 你想获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。 如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如: import os.pa

  • 我有一个csv($HomeDir)文件,如下所示: 我得到成功的LastAccessTime每个子文件夹在'HomeDir'列与此代码: $newcsv的结果是: 问题是:有没有办法根据相应的“用户”列分配相关用户?这样的输出对我来说也足够了 提前谢谢

  • 如何使用BigQueryJavaAPI获取云存储子目录中的对象列表? 我可以在文件夹中获取对象列表,但不能在第二级文件夹中获取。所以如果我有/Folder1/Folder2/File1.csv/Folder1/File2.csv 我可以得到Folder2 但是如何获取Folder2中的对象列表呢?

  • 问题内容: 我无法在脚本化的Jenkins Pipeline中的给定目录中创建文件名的简单列表。我尝试了在SO和其他论坛上发布的许多Groovy Script示例,但是该功能被阻止或找不到方法或其他方法。 这似乎是最简单的 但这会错误地解决相对路径,因此出现此错误: 我还尝试用以下方法包装它: 但是有同样的错误: 这不会产生错误,只会将一个文件添加到列表中: 然后,除第一个文件外,所有文件的内容都

  • 我正在寻找一种方法来获取zip文件中的文件列表。我创建了一个方法来获取目录中的文件列表,但我也在寻找一种方法来获取zip文件中的文件,而不是只显示zip文件。 以下是我的方法: