目前,我使用此功能创建子文件夹列表:
% 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