MATLAB文件读写按 fopen 打开、读写、fclose 关闭这三步来。计算结果要留给 Excel 或其他程序时,就把数据写进文本文件,读回来时再按同样流程打开。
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);把矩阵整个写进文件
矩阵可以用 writematrix 或 dlmwrite 一条命令导出,不必自己写循环:
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 这类高层函数会自己处理打开和关闭,矩阵进出文件时可以优先考虑它们。