我有这样的代码:
myFolder='C:\Users\abe7rt\Desktop\dat\1';
filePattern=fullfile(myFolder, '*.txt');
txtFiles=dir(filePattern);
现在,dat 是一个包含“1,2,3”文件夹的文件夹,每个文件夹都包含 20 个 TXT 文件。前面的代码能够从 1 个文件夹中获取 txt 文件。现在我的问题是:有没有办法遍历所有目录?
还有另一种可能性,使用 MATLAB 附带的 apache commons 库:
function fileNames = findAllFiles(directory, wildcardPattern)
import org.apache.commons.io.filefilter.*;
import org.apache.commons.io.FileUtils;
import java.io.File;
files = FileUtils.listFiles( File(directory),...
WildcardFileFilter(wildcardPattern),...
FileFilterUtils.trueFileFilter());
fileNames = cellfun(@(f) char(f.getCanonicalPath()),...
cell(files.toArray()),...
'uniformOutput', false);
end
使用例如:
files = findAllFiles('C:\Users\abe7rt\Desktop\dat', '*.txt')
如果您还想在搜索应该下降的目录名称上应用模式,您可以简单地将 替换为FileFilterUtils.trueFileFilter()
另一个WildcardFileFilter
.
就在这里 :)
一个非常好的功能是这个:
你可以像这样使用它:
fileList = getAllFiles('D:\dic');
然后你只需要摆脱非 txt 文件,例如通过检查循环内的扩展名!
那么你可以做类似的事情
for k=1:3
myFolder{k}=['C:\Users\abe7rt\Desktop\dat\' num2str(k)];
filePattern{k}=fullfile(myFolder{k}, '*.txt');
txtFiles{k}=dir(filePattern{k});
end
如果性能/内存是一个问题,您显然可以预先分配数组/单元数组的大小。
您可以使用Matlab函数的递归版本fileattrib
,然后选择带有.txt的txt文件regexp
。此解决方案适用于任意数量的文件夹和任何级别的嵌套。
[success,message,messageid] = fileattrib('C:\Users\abe7rt\Desktop\dat\*');
[names{1:numel(message)}] = deal(message.Name);
names_txt = names(~cellfun(@isempty, regexp(names,'\.txt$')));
元胞数组names_txt
包含所有 txt 文件的全名。names_txt{n}
带有第 n 个文件全名的字符串也是如此。
确保将 final 添加\*
到根路径。