MATLAB文件读写按 fopen 打开、读写、fclose 关闭这三步来。计算结果要留给 Excel 或其他程序时,就把数据写进文本文件,读回来时再按同样流程打开。

文件读写三步走 fopen('file','w') 打开文件,拿到 fid 读写数据 fprintf / fscanf / fgetl fclose(fid) 用完必关
fopen 打开文件拿到 fid → 用 fprintf/fscanf/fgetl 读写 → 用完必 fclose,否则文件可能损坏或被锁。

写文本文件:fopen + fprintf + fclose

fid = fopen('result.txt', 'w');   % 'w' = 写模式(会覆盖旧文件)
fprintf(fid, '第一行:%d
', 42);
fprintf(fid, '第二行:%.2f
', 3.14159);
fclose(fid);

fprintf 的第一个参数改成文件标识符 fid 后,后面的格式串写法和输出到屏幕时一样。

读文本文件:fopen + fscanf / fgetl + fclose

逐行读用 fgetl(会去掉换行符):

fid = fopen('result.txt', 'r');   % 'r' = 读模式
while ~feof(fid)                  % 没到文件结尾就继续
    line = fgetl(fid);
    disp(line)
end
fclose(fid);

按格式读用 fscanf,适合结构规整的数据文件:

fid = fopen('data.txt', 'r');
data = fscanf(fid, '%f', [rows, cols]);   % 按行×列读成矩阵
fclose(fid);

写模式与追加模式

模式作用
'r'只读。文件必须存在,否则报错
'w'只写。覆盖已存在的文件
'a'追加。在文件末尾继续写
'r+'读 + 写
fid = fopen('log.txt', 'a');    % 追加写日志
fprintf(fid, '%s 发生事件
', datestr(now));
fclose(fid);

把矩阵整个写进文件

矩阵可以用 writematrixdlmwrite 一条命令导出,不必自己写循环:

A = magic(4);
writematrix(A, 'magic.csv')        % 导出 CSV
writematrix(A, 'magic.txt', 'Delimiter', ' ')  % 空格分隔

读回来用 readmatrix

B = readmatrix('magic.csv')

一个完整小例子

把 1 到 10 的平方写进文件,再读回来核对:

x = 1:10;
y = x.^2;
fid = fopen('squares.txt', 'w');
fprintf(fid, 'x  x^2
');
for k = 1:10
    fprintf(fid, '%d  %d
', x(k), y(k));
end
fclose(fid);

% 读回来
fid = fopen('squares.txt', 'r');
raw = textscan(fid, '%s', 1);        % 跳过表头
data = fscanf(fid, '%d %d', [2 Inf]); % 两列不限行数
fclose(fid);
disp(data)

用完文件要 fclose。程序异常退出或重复打开而不关闭,可能导致文件损坏或被锁。readmatrix / writematrix 这类高层函数会自己处理打开和关闭,矩阵进出文件时可以优先考虑它们。