每个文件是磁盘上的一组字节。在 ActionScript 中,文件中的数据始终可以表示为 ByteArray。例如,以下代码将文件中的数据读入到名为
bytes
的 ByteArray 对象中:
var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream = new air.FileStream();
myFileStream.addEventListener(air.Event.COMPLETE, completeHandler);
myFileStream.openAsync(myFile, air.FileMode.READ);
var bytes = new air.ByteArray();
function completeHandler(event)
{
myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable);
}
同样,以下代码将名为
bytes
的 ByteArray 中的数据写入文件:
var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream = new air.FileStream();
myFileStream.open(myFile, air.FileMode.WRITE);
myFileStream.writeBytes(bytes, 0, bytes.length);
不过,通常您不希望在 ActionScript ByteArray 对象中存储数据,并且数据文件通常是指定的文件格式。
例如,文件中的数据可能是文本文件格式,您可能希望在 String 对象中表示这种数据。
因此,FileStream 类包括读取和写入方法,用于读取和写入除 ByteArray 对象以外的类型的数据。例如,使用
readMultiByte()
方法可以从文件中读取数据,然后将它存储到字符串,如以下代码中所示:
var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream = new air.FileStream();
myFileStream.addEventListener(air.Event.COMPLETE, completed);
myFileStream.openAsync(myFile, air.FileMode.READ);
var str = "";
function completeHandler(event)
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
readMultiByte()
方法的第二个参数指定 ActionScript 用来解释数据的文本格式(在示例中是“iso-8859-1”)。Adobe AIR 支持常见的字符集编码(请参阅
支持的字符集
)。
FileStream 类还包括
readUTFBytes()
方法,该方法使用 UTF-8 字符集将读取缓冲区中的数据读入一个字符串中。由于 UTF-8 字符集中字符的长度是可变的,请不要在响应
progress
事件的方法中使用
readUTFBytes()
,这是因为读取缓冲区结尾的数据可能表示不完整的字符。(将
readMultiByte()
方法用于可变长度字符编码时,需同样遵循上述要求。)因此,当 FileStream 对象调度
complete
事件时,应读取整个数据集。
还有类似的写入方法
writeMultiByte()
和
writeUTFBytes()
可用于 String 对象和文本文件。
readUTF()
和
writeUTF()
方法(请不要与
readUTFBytes()
和
writeUTFBytes()
相混淆)也可以从文件读取文本数据和将文本数据写入文件,不过它们假定文本数据前面有指定文本数据长度的数据(此方式在标准文本文件中不常见)。
有些 UTF 编码的文本文件以“UTF-BOM”(字节顺序标记)字符开头,该字符定义字节顺序以及编码格式(如 UTF-16 或 UTF-32)。
有关读取和写入文本文件的示例,请参阅
示例:将 XML 文件读取到 XML 对象中
。
使用
readObject()
和
writeObject()
可以很方便地存储和检索复杂 ActionScript 对象的数据。数据采用 AMF (ActionScript Message Format) 编码。Adobe AIR、Flash Player、Flash Media Server 和 Flex Data Services 包括用于此格式数据的 API。
还有一些其他读取和写入方法(如
readDouble()
和
writeDouble()
)。不过,如果您使用这些方法,请确保文件格式与这些方法定义的数据的格式相匹配。
文件格式通常比简单文本格式复杂。例如,MP3 文件包括压缩的数据,这些数据只能使用特定于 MP3 文件的解压缩和解码算法解释。MP3 文件还可能包括 ID3 标签,这些标签包含有关文件的元标签信息(如歌曲的标题和艺术家)。ID3 格式有多种版本,不过最简单的版本(ID3 第 1 版)在
示例:使用随机访问读取和写入数据
部分中进行了介绍。
其他文件格式(用于图像、数据库、应用程序文档等)具有不同的结构,若要在 ActionScript 中使用这些格式的数据,必须了解数据的构造方式。