本节说明 MATLAB 中按文件标识符进行文本读写的标准流程:以 fopen 打开文件并取得 fid,通过 fprintf、fscanf 或 fgetl 读写内容,最后用 fclose 关闭。若未关闭文件,可能导致数据未完全写入或文件被其他程序锁定。本站 在线编译器不提供磁盘文件,下列示例供对照查阅,不宜在该环境中点运行验证;请在本地 MATLAB 或 Octave 中建立工作目录后再练习。
写文本文件:fopen + fprintf + fclose
fid = fopen('result.txt', 'w'); % 'w' = 写模式(会覆盖旧文件)
fprintf(fid, '第一行:%d\n', 42);
fprintf(fid, '第二行:%.2f\n', 3.14159);
fclose(fid);当 fprintf 的第一个参数为文件标识符 fid 时,格式串规则与输出到命令窗口时相同,内容写入对应文件。格式串末尾的 \n 表示换行,不可省略,否则多段文字会连在同一行。
读文本文件: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 发生事件\n', datestr(now));
fclose(fid);矩阵整表读写
在较新的 MATLAB 中,矩阵导出可不手写循环,而使用 writematrix:
A = magic(4);
writematrix(A, 'magic.csv') % 导出 CSV
writematrix(A, 'magic.txt', 'Delimiter', ' ') % 空格分隔读回可使用 readmatrix:
B = readmatrix('magic.csv')GNU Octave 与较早的 MATLAB 往往没有 writematrix / readmatrix,可改用 dlmwrite、csvwrite、load 或上一节的 importdata。选用函数时以当前环境的帮助文档为准。
完整示例
将 1 到 10 的平方写入文件,再读回验证:
x = 1:10;
y = x.^2;
fid = fopen('squares.txt', 'w');
fprintf(fid, 'x x^2\n');
for k = 1:10
fprintf(fid, '%d %d\n', 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。程序异常退出或重复打开而不关闭,可能导致文件内容不完整或被锁定。纯数值矩阵的交换在 MATLAB 中可优先选用 readmatrix / writematrix,由函数内部处理打开与关闭。
本节说明了 fopen–读写–fclose 流程、常见打开模式及矩阵级导入导出函数。下一节介绍结构体:字段命名、点号访问与结构体数组。