MATLAB基础及应用(第5版)
上QQ阅读APP看书,第一时间看更新

1.5 文件操作

文件操作是一种重要的输入/输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入/输出函数,专门用于文件操作。

1.5.1 文件的打开与关闭

1.打开文件

在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:

说明:fid用于存储文件句柄,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下。

● ′r′:只读方式打开文件(默认的方式),该文件必须已存在。

● ′r+′:读写方式打开文件,打开后先读后写。该文件必须已存在。

● ′w′:打开后写入数据。该文件已存在则更新,不存在则创建。

● ′w+′:读写方式打开文件。先读后写。该文件已存在则更新,不存在则创建。

● ′a′:在打开的文件末端添加数据。文件不存在则创建。

● ′a+′:打开文件后,先读入数据再添加数据。文件不存在则创建。

另外,在这些字符串后添加一个t,如′rt′或′wt+′,则将该文件以文本方式打开;如果添加的是b,则以二进制格式打开,这也是fopen函数默认的打开方式。

2.关闭文件

当文件进行完读、写等操作后,应及时关闭文件,以免数据丢失。关闭文件用fclose函数,调用格式为:

说明:该函数关闭fid所表示的文件句柄。sta表示关闭文件操作的返回值,若关闭成功,返回0,否则返回-1,通常默认sta。如果要关闭所有已打开的文件用fclose(′all′)。

1.5.2 二进制文件的读写操作

1.写二进制文件

fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式如下:

说明:COUNT返回所写的数据元素个数(可缺省),fid 为文件句柄,A 用来存放写入文件的数据,precision 代表数据精度,常用的数据精度有 char、uchar、int、long、float、double等。默认数据精度为uchar,即无符号字符格式。

例1-18】 将一个二进制矩阵存入磁盘文件中。

2.读二进制文件

fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:

说明:A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid 为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用 size,则可以是下列值:N(读取N个元素到一个列矢量)、[M,N](读M行N列的数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。

例1-19】 将上例数据文件中的前5个数据读入到矩阵B中。

注意:矩阵在内存中是按列存放的,所以,存入文件的行矢量读出后,变成了列矢量。在进行文件操作时,一定要小心,必要时可把矩阵转置。

1.5.3 声音文件的读写操作

1.读声音文件

audioread函数可以读取扩展名为wav、wma、mp3的声音文件,并按指定格式存入矩阵。其调用格式如下:

说明:其中Y为矩阵,用来存放读取的声音数据,矩阵的每一列代表一个单独的数据通道(立体声数据被指定为一个具有两列的矩阵),FS 是返回的采样频率,FILE 为包括扩展名的声音文件。

2.写声音文件

audiowrite函数可以将声音数据按指定格式写入到文件中(扩展名为wav、wma、mp3等)。其调用格式如下:

说明:其中Y为矩阵,代表准备写入文件的声音数据、FS 为采样频率(默认时为8000Hz)、FILENAME 为声音文件名。

例1-20】 搜索Windows下的声音文件 ding.wav或使用 Windows 提供的录音机录制一段自己的语音(时间控制在1~3s,将文件另存在硬盘上并更名),使用 wavread函数读入,观察其采样频率和数据位数;将采样频率改为8000Hz和数据位数改为8位后,保存到 E 盘并播放该声音文件。

注意:使用Windows提供的录音机录制的声音文件的扩展名为 wma,采样频率为44100Hz。

1.5.4 图像文件的读写操作

1.读图像文件

imread函数用于从文件中读入图像,图像文件的格式可以是bmp(Windows位图文件)、hdf(层次数据格式图像文件)、jpg或jpeg(压缩图像文件)、pcx(Windows画笔图像文件)、tif或tiff(标签图像格式文件)等。其函数格式如下:

说明:A为无符号8位整数(uint8)矩阵。如果读入文件为灰度图像,则 A 为二维矩阵;如果读入图像为真彩色RGB图像,则A为三维矩阵。

说明:map为双精度浮点数(double),其值在0~1,表示图像的颜色值。

2.写图像文件

imwrite函数用于将图像写入文件,图像格式同imread函数。其函数格式如下:

说明:与imread函数相同。

说明:map表示图像颜色格式,其他与imread函数相同。

例1-21】 读入文件名为cameraman.tif的图像文件,改文件名为image、改格式为jpg后,存入D盘。

打开D盘,可以看到该图像文件的图标。