23.5.读写文件

23.5.1.问题
我想在文件系统上创建,访问和写文件。
23.5.2.解决办法
使用AIR的file system API的File, FileStream, 和FileMode类。
23.5.3.讨论
一个File对象是一个指针,代表一个文件或一个目录。要读写文件到硬盘驱动器,你可以使用FileStream把File对象放入一个缓冲区,通过FileStream类的同步和异步方法读取和写入。

当使用的同步的FileStream.open方法时,文件被当作一个ByteArray对象,其他任何操作将被暂停直到文件被读取或写入。而异步的FileStream.openAsync方法类似于URLStream对象,数据被放置在缓冲区。使用同步还是异步方法这取决于你的程序需求,但是有点需要注意,就是所有操作完成后要记得关闭流。

当调用FileStrema.open和FileStream.openAsync方法时可通过FileMode类的字符串常量设定文件的具体操作方式。FileMode.WRITE常量指当打开一个文件流,如果文件文件不存在则创建文件并写入数据,如果文件存在则覆盖所有数据。FileMode.APPEND常量指把缓冲区的数据追加到文件末尾,FileMode.UPDATE常量则既可以读也可以写文件。所有的写指令当文件不存在时都会创建新文件,当使用FileMode.READ时,文件事先必须存在,并把文件数据读取到缓冲区中。

为了读写文件,你需要把File对象指向一个用户电脑中的文件。File类有一些静态属性和方法对应操作系统文件系统的标准目录以及应用程序目录和应用程序存储目录。

下面的例子使用同步的FileStream.open方法在桌面上写文件:
+展开
-ActionScript
var file:File = File.desktopDirectory.resolvePath( "test.txt");
var stream:FileStream = new FileStream();
stream.open( file, FileMode.WRITE );
stream.writeUTFBytes( "Hello World");
stream.close();

名为test.txt的文件被创建或打开,使用FileStream.writeUTFBytes方法写入文本Hello World。

要读取文件数据,可使用FileStream.readUTFBytes方法:
+展开
-ActionScript
var file:File = File.desktopDirectory.resolvePath( "test.txt" );
var stream:FileStream = new FileStream();
stream.open( file, FileMode.READ );
trace( stream.readUTFBytes( stream.bytesAvailable ) );
stream.close();

当使用FileMode.READ参数打开文件时,FileStream对象会立即读取数据到缓冲区,通过FileStream.bytesAvailable属性访问缓冲区数据。当使用同步的FileStream.open方法时,其他所有操作都暂停直到数据都被放入缓冲区,因为这个操作占据了主应用程序线程。你可以使用异步FileStream.openAsync 方法代替同步方法打开文件,并监听progress 和complete事件。

如果使用FileMode.WRITE参数将会覆盖任何其他数据,要检测是否已经有文件存在,可使用File类的exists属性:
+展开
-ActionScript
var file:File = File.desktopDirectory.resolvePath( "test.txt");
if( file.exists ){
trace( "File created:"+ file.creationDate );
file = File.desktopDirectory.resolvePath( "test2.txt");
}
var stream:FileStream = new FileStream();
stream.open( file, FileMode.WRITE );
stream.writeUTFBytes( "Hello World");
stream.close();

FileStream.writeUTFBytes和FileStream.readUTFByte方法只是FileStream类中读写方法的一小部分。

讨论读写文件中,需要特别注意的是当AIR程序安装时所创建的目录的读写权限。在程序安装时有个主要的目录被创建, 它们是应用程序目录和应用程序存储目录。

File.applicationDirectory和File.applicationStorageDirectory分别指向这两个目录,应用程序目录是只读的,而应用程序存储目录可读写,你可以读取也可以写入需要的文件数据。

加支付宝好友偷能量挖...


评论(0)网络
阅读(77)喜欢(0)flash/flex/fcs/AIR