APPEND
用于要在写入模式下打开的文件,并将所有写入的数据附加到文件末尾。打开文件时,会创建任何不存在的文件。
READ
用于要在只读模式中打开的文件。文件必须存在(不创建缺少的文件)。
UPDATE
用于要在读/写模式中打开的文件。打开文件时,会创建任何不存在的文件。
WRITE
用于要在只写模式中打开的文件。打开文件时,会创建任何不存在的文件,并截断任何现有的文件(删除其数据)。
我们在FileStream的open()和openAsync()方法中使用FileMode的四个静态常量来作为参数,以此来告知FileStream操作文件时应该使用的具体功能。
下面是一段Flex代码,是打开一个文本文件,并向里面写入信息:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
private function createFile():void{
var newFile:File=File.desktopDirectory.resolvePath("MyNewFile.txt");
var fileStream:FileStream=new FileStream();
fileStream.openAsync(newFile,FileMode.WRITE);
fileStream.writeUTFBytes("这是写入的文本信息.\n这是写入的文本信息.\n这是写入的文本信息.\n");
//fileStream.writeMultiByte("这是写入的文本信息.\n这是写入的文本信息.\n这是写入的文本信息.\n,"cn-gb");
fileStream.close();
}
]]>
</mx:Script>
<mx:Button label="写入文件" click="createFile()" horizontalCenter="0"/>
</mx:WindowedApplication>
上面代码运行的结果,会依照你的操作系统而变的不同。
在win环境下,用任意文本工具打开MyNewFile.txt文本,都可以正常显示结果。
在MAC环境下,文件被生成,如果你用第三方文本编辑器或者Pico打开该文件,你会发现这个Unicode文本文件的信息一切正常。

但是如果你用MACOS系统自身的文本编辑或者Office等软件去打开它,会发现,不论你如何调整这些软件的编码(即使你设置为unicode),打开这个文本文件全部是乱码,而不是正常的中文。目前,我的解决办法是使用writeMultiByte(注释掉writeUTFBytes这一行),然后专门指定其中的编码是cn-gb,这样就可以使用MACOS自带的软件或者Office正常打开查看了。
我猜想这是MACOS自带文本编辑和Office软件上一个默认设置所致,这些软件的默认设置全部是简体中文(MACOS)的方式,所以通过Unicode创建的带有中文的文本便无法被正确处理。总而言之,我们开发的AIR应用如果在使用FileStream进行文件写入的时候,不得不考虑跨平台的兼容方法(很庆幸AIR的确有),而对于WriteUTFBytes方法,如果你希望MAC系统的用户也正常看到信息,就最好谨慎考虑使用。毕竟生成文件后,让MAC用户修改软件配置或者通过命令行Pico查看文本信息显的不太符合简便操作的道理。如果你的应用只针对Win用户,请大胆的使用WriteUTFBytes方法。
Part 7就到这里,Part8将讲解读取,更新和后续添加文件信息的部分。
=============
连载索引:
AIR APIs详解 - 文件访问系统 part1
AIR APIs详解 - 文件访问系统 part2
AIR APIs详解 - 文件访问系统 part3
AIR APIs详解 - 文件访问系统 part4
AIR APIs详解 - 文件访问系统 part5
AIR APIs详解 - 文件访问系统 part6