使用java.io.File读取递归文件夹

时间:2014-11-06 10:02:38

标签: java matlab recursion directory

目前,我使用此功能创建子文件夹列表:

% create list of all sub folders
dirs = regexp(genpath(basePath),['[^;]*'],'match');

我的文件夹包含> 100 000个文件。此功能需要几分钟到几小时才能完成。 然而,文件夹的数量仅为< 100。

我读到java.io.File的速度更快。但是,如何使用它来递归读取文件夹?

jFile = java.io.File([basePath '*']); %java file object
jPaths = jFile.listFiles;       %java.io.File objects
jNames = jFile.list;            %java.lang.String objects
isFolder = arrayfun(@isDirectory,jPaths); %boolean
dirs = cellstr(char(jNames(~isFolder)));   %cellstr

给了我一个空数组。

编辑: 我尝试了下面这个,但是递归失败了,因为在函数返回后dirs数组是空的 - 好像dirs是一个全局变量......

function [sub] = subfolders (CurrPath,sub)
%------------------------------------------------
jFile = java.io.File(CurrPath); %java file object
jPaths = jFile.listFiles;       %java.io.File objects
jNames = jFile.list;            %java.lang.String objects
isFolder = arrayfun(@isDirectory,jPaths); %boolean
dirs = cellstr(char(jNames(isFolder)))   %cellstr

if nargin == 1
    sub = {};
end

for i = 1:numel(dirs)
    currSubDir = dirs{i};
    if ~isempty(currSubDir)
        sub{end+1} = fixPath([CurrPath '\' currSubDir]);        
        sub = subfolders(sub{end},sub);
    end
end% if

0 个答案:

没有答案