You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB App Designer中使用uipickfiles函数并读取所选文件夹内的文本文件

如何在MATLAB App Designer中使用uipickfiles函数并读取所选文件夹内的文本文件

我之前做类似的MATLAB App时也踩过这个坑,其实核心问题就是没把文件路径处理对,咱们一步步来解决你的问题:

首先,你遇到的"filename" must be a string scalar or character vector错误,是因为你直接把文件夹路径传给了readtable或readmatrix,但这些函数需要的是具体的单个文件路径,不是文件夹。所以得先把选中文件夹里的所有文本文件找出来,再逐个读取。

下面是完整的ButtonPushed回调代码示例,我给你加了详细的注释,你可以直接放到App Designer里用:

function ButtonPushed(app, event)
    % 调用uipickfiles,设置只允许选择文件夹
    selectedFolders = uipickfiles('PickFolders', true);
    
    % 如果用户没选任何文件夹,直接退出
    if isempty(selectedFolders)
        return;
    end
    
    % 把返回的cell数组转换成字符串数组,后续操作更方便
    selectedFolders = string(selectedFolders);
    
    % 初始化一个空表格,用来存储所有读取到的数据
    app.AllCollectedData = table(); % 把数据存在App属性里,其他回调也能调用
    
    % 遍历每一个选中的文件夹
    for folderNum = 1:length(selectedFolders)
        currentFolder = selectedFolders(folderNum);
        
        % 获取当前文件夹下所有的.txt文件(如果是其他格式,改后缀就行)
        txtFiles = dir(fullfile(currentFolder, '*.txt'));
        
        % 如果这个文件夹里没有txt文件,直接跳过
        if isempty(txtFiles)
            continue;
        end
        
        % 遍历当前文件夹里的每一个txt文件
        for fileNum = 1:length(txtFiles)
            % 拼接完整的文件路径(一定要用fullfile,自动适配Windows/Mac路径分隔符)
            fullFilePath = fullfile(currentFolder, txtFiles(fileNum).name);
            
            try
                % 读取文件:如果是带表头的结构化文本用readtable,纯数值用readmatrix
                fileData = readtable(fullFilePath);
                
                % 可选:给表格加一列记录文件来源,方便后续区分数据来自哪个文件
                fileData.Source = repmat(fullFilePath, height(fileData), 1);
                
                % 把当前文件的数据合并到总表格里
                app.AllCollectedData = vertcat(app.AllCollectedData, fileData);
            catch errorInfo
                % 捕获错误,避免单个文件出问题导致整个程序崩溃,同时提示用户
                errordlg(['读取文件失败:', fullFilePath, '\n错误详情:', errorInfo.message], '文件读取错误');
            end
        end
    end
    
    % 读取完成后给用户一个提示
    msgbox(['已完成读取!共收集到 ', height(app.AllCollectedData), ' 条数据'], '操作完成');
end

这里有几个关键细节要注意:

  • 调用uipickfiles时加上'PickFolders', true参数,确保用户只能选文件夹,避免误选单个文件
  • 用fullfile拼接路径:绝对不要自己手动加\或/,不同系统的路径分隔符不一样,fullfile会自动处理,避免路径错误
  • 加入try-catch块:如果某个文本文件格式有问题(比如表头不对、数值格式错误),程序不会直接崩溃,还能告诉你哪个文件出了问题
  • 把数据存在App的属性里:比如app.AllCollectedData,这样你在其他回调(比如显示数据的按钮、导出数据的按钮)里也能直接调用这些数据

如果你的文本文件是纯数值的,把代码里的readtable换成readmatrix就行,后续合并的时候用vertcat或者cat(1, ...)来合并矩阵。

备注:内容来源于stack exchange,提问作者Chaz69631

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:13:09