在MATLAB做数据处理时,你是不是经常遇到这样的头疼问题:辛辛苦苦算好的数据不知道该怎么保存?或者拿到一个复杂的txt、二进制数据文件,完全不知道该怎么读取?其实,只要掌握了MATLAB的文件读写操作,这些都能轻松搞定。今天我们就从最基础的文件打开关闭,到进阶的二进制与格式化读写,手把手带你玩转MATLAB文件I/O。
在读写任何文件之前,第一步都是先用 fopen 函数“敲门”。它的常用语法是 fid = fopen('文件名', '模式')。这里的 fid 是文件标识符,如果打开成功,它会返回一个非负整数;如果失败(比如文件不存在),则会返回 -1。
文件打开的模式决定了你能对文件做什么操作。最常用的几种模式包括:
'r':只读模式(默认),文件必须已经存在。'w':写入模式。如果文件已存在会清空内容,不存在则新建。'a':追加模式。在文件末尾添加新数据,不覆盖原有内容。'r+'、'w+'、'a+':分别对应读写、读写(清空/新建)、读写(追加)。另外,在模式后面加上 't'(如 'rt')代表以文本方式打开,MATLAB会自动处理换行符;加上 'b'(如 'wb')则代表以二进制方式打开。操作完成后,千万别忘了用 fclose(fid) 关闭文件,成功关闭会返回 0。

如果你需要处理图像原始数据、传感器采集的数值矩阵,二进制读写是最高效的选择。
写入二进制文件使用 fwrite,例如把一组双精度数据存入磁盘:
data = [1 2 3; 4 5 6];
fid = fopen('mydata.bin', 'wb'); % 以二进制写入模式打开
fwrite(fid, data, 'double'); % 将数据以双精度格式写入
fclose(fid);
读取二进制文件则使用 fread。你需要提前知道数据的类型(如 'int32', 'double', 'char' 等),否则读出来的会是一堆乱码:
fid = fopen('mydata.bin', 'rb'); % 以二进制读取模式打开
A = fread(fid, , 'double'); % 读取2x3的双精度矩阵
fclose(fid);
fread 的第三个参数 precision 非常关键,它告诉MATLAB文件里的数据到底是什么格式。
处理普通的 txt 文档或带有特定格式的日志文件,fprintf 和 fscanf 是最好的搭档。它们的用法和 C 语言非常相似,通过 %d(整数)、%f(浮点数)、%s(字符串)等格式符来精准控制读写。
比如,你想把一组正弦波数据按漂亮的格式存入 txt 文件:
t = 1:5; s = sin(t);
fid = fopen('output.txt', 'wt');
fprintf(fid, '时间\t正弦值\n');
fprintf(fid, '%d\t%.4f\n', [t; s]); % 格式化写入
fclose(fid);
反过来,如果你想从这个 txt 文件里把数据读回 MATLAB,可以使用 fscanf:
fid = fopen('output.txt', 'rt');
% 跳过第一行表头,按整数和浮点数的格式读取
data = fscanf(fid, '%d %f', [2, inf]);
fclose(fid);
有时候文本文件每一行的格式都不一样,用 fscanf 很难匹配,这时就需要逐行读取。fgetl(fid) 可以读取文件的一行,并自动去掉行末的换行符;而 fgets(fid) 则会保留换行符。如果读到文件末尾,它们都会返回 -1。
配合 feof(fid)(判断是否到文件尾)和 frewind(fid)(把指针移回文件开头),你就能写出非常灵活的文本解析脚本。
熟练掌握这些MATLAB文件读写函数,无论是保存实验结果还是解析外部数据,都能让你得心应手。建议大家在日常练习中多动手尝试不同的文件模式和数据格式,把这些基础操作练成肌肉记忆。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。