我有这样的代码:
myFolder='C:\Users\abe7rt\Desktop\dat\1';
filePattern=fullfile(myFolder, '*.txt');
txtFiles=dir(filePattern);
现在,dat是一个包含“1,2,3”文件夹的文件夹,这些文件夹中的每一个都包含20个TXT文件。 以前的代码能够从1个文件夹中获取txt文件。现在我的问题是:有没有办法遍历所有目录?
答案 0 :(得分:4)
另一种可能性,使用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
。
答案 1 :(得分:3)
是的,有:)
这是一个非常好的功能:
你可以像这样使用它:
fileList = getAllFiles('D:\dic');
然后你必须摆脱非txt文件,例如通过检查循环中的扩展名!
答案 2 :(得分:2)
你可以做点什么
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
如果性能/内存存在问题,您显然可以预先分配数组/单元阵列的大小。
答案 3 :(得分:1)
您可以使用Matlab函数fileattrib
的递归版本,然后使用regexp
选择txt文件。此解决方案适用于任意数量的文件夹和任何级别的嵌套。
[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个文件的全名。
确保将最终\*
添加到根路径。