matlab遍历文件夹下指定类型的文件以及子文件夹

来源:互联网 发布:希拉里 放过, 知乎 编辑:程序博客网 时间:2024/05/29 08:40
  • 文件结构
    最近需要将文件夹下所有图像文件的文件名导出,只知道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    endend
  • matlab函数
    • strfind函数
      strfind(str,patten) ,查找str中是否有pattern,返回出现位置,没有出现返回空数组 。
    • fullfile函数
      fullfile(‘dir1’, ‘dir2’, …, ‘filename’),利用文件各部分信息创建并合成完整文件名。
    • 调用
      name = foreachDir(‘yourselfPath’);
  • 遗留问题
    在实现过程中为了遍历子文件夹,使用了递归实现,因此效率上有点低下;同时,递归实现在文件夹嵌套比较深的情况下,可能会报出错误(Java下会提示棧错误)。
    更重要的是,在文件过滤处,自己知识根据自己需要指定了文件后缀,并没有详细考虑文件类型。
阅读全文
0 0
原创粉丝点击