文件结构
最近需要将文件夹下所有图像文件的文件名导出,只知道matlab的dir函数能够获取到目录下的文件以及文件夹名称,却不能递归的遍历所有子文件夹,因此自己matlab编写了一个函数,实现自己的需求代码实现
function name = foreachDir(mainPath)
% 遍历文件夹及文件
% mainPath 主路径
% name 满足条件的文件名
% 当前目录下的文件
files = dir(mainPath);
% 文件数量
len = length(files);
name = {};
index = 1;
for ii = 1 : len
% 跳过.以及..文件夹
if (strcmp(files(ii).name, '.') == 1) ...
|| (strcmp(files(ii).name, '..') == 1)
continue;
end
% 递归调用函数,遍历当前目录下的文件夹(深度过深,可能会报错)
if files(ii).isdir == 1
tmpName = foreachDir(fullfile(mainPath, '\', files(ii).name));
for kk = 1 : length(tmpName)
name{index} = tmpName(kk);
index = index + 1;
end
end
% 读取指定类型的文件(可根据自己需要修改)
if ~isempty(strfind(files(ii).name, '.jpg')) ...
|| ~isempty(strfind(files(ii).name, '.png')) ...
|| ~isempty(strfind(files(ii).name, '.bmp'))
name{index} = fullfile(mainPath, '\', files(ii).name);
index = index + 1;
end
end
end
- matlab函数
- strfind函数
strfind(str,patten) ,查找str中是否有pattern,返回出现位置,没有出现返回空数组 。 - fullfile函数
fullfile(‘dir1’, ‘dir2’, …, ‘filename’),利用文件各部分信息创建并合成完整文件名。 - 调用
name = foreachDir(‘yourselfPath’);
- strfind函数
- 遗留问题
在实现过程中为了遍历子文件夹,使用了递归实现,因此效率上有点低下;同时,递归实现在文件夹嵌套比较深的情况下,可能会报出错误(Java下会提示棧错误)。
更重要的是,在文件过滤处,自己知识根据自己需要指定了文件后缀,并没有详细考虑文件类型。