ActionScript 读写文件
来源:互联网 发布:zeroclipboard.js使用 编辑:程序博客网 时间:2024/05/16 12:44
转:http://www.flashj.cn/wp/air-file-operation3.html 博主:鼠标炸弹技术博客
快速上手例:
例1.读xml
var testXML:XML;var file:File = File.documentsDirectory.resolvePath("Mousebomb/test.xml");var fileStream:FileStream = new FileStream();fileStream.open(file, FileMode.READ);testXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));fileStream.close();
例中使用readUTFBytes()方法读取内容并转换为XML对象。
例2.写xml
var testXML:XML =<mousebomb><site>www.mousebomb.org</site><blog>www.flashj.cn</blog></mousebomb>;var file:File = File.documentsDirectory.resolvePath("Mousebomb/test.xml");var fileStream:FileStream = new FileStream();fileStream.open(file, FileMode.WRITE);var outputString:String = '<?xml version="1.0" encoding="utf-8"?>';outputString += testXML.toXMLString();fileStream.writeUTFBytes(outputString);fileStream.close();
工作流程
- 创建File对象指向文件路径
- 初始化FileStream对象
- 使用FileStream的open()或openAsync()方法
- 若使用的是异步的openAsync()方法则需要为FileStream设置事件监听
- 加入所需的读写数据代码
- 完成文件操作后执行FileStream的close()方法
使用FileStream要了解的知识
- FileModeFileStream的open()和openAsync()方法都包含一个fileMode参数,该参数用于设置:
读取文件能力
写入文件能力
是否总在文件末尾追加数据(写数据时)
文件不存在时如何操作(或文件的父级不存在时)
具体值包括
- position该属性决定下一个数据读写操作进行的位置。在读写操作前,设置position属性为文件中的有效位置,比如:
该例在位置8处写入UTF编码的字符串“hello”var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/site.txt");var myFileStream:FileStream = new FileStream();myFileStream.open(myFile, FileMode.UPDATE);myFileStream.position = 8;myFileStream.writeUTFBytes("hello");
新打开的FileStream对象的position值为0,在读文件操作前,position的值必最小为0并小于文件总字节数。position的值仅会在以下情况下改变:
直接设置该属性值
执行读取操作
执行写入操作
当执行读/写操作时,position的值会立即自增读/写的字节数,再次执行读/写操作时会从新的position位置开始:
var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.open(myFile, FileMode.UPDATE);myFileStream.position = 4000;trace(myFileStream.position); // 4000myFileStream.writeBytes(myByteArray, 0, 200);trace(myFileStream.position); // 4200
position有一个例外:若文件打开模式设置为append(追加模式),则position属性不会随着写操作变化。在追加模式下,数据总是往文件末尾写,与position无关。
异步方式打开文件,写数据操作在下一行代码执行时并没有结束。这怎么办呢?没关系,你可以按顺序的调用多个异步操作,AIR运行环境会逐个执行:
var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.openAsync(myFile, FileMode.WRITE);myFileStream.writeUTFBytes("hello");myFileStream.writeUTFBytes("world");myFileStream.addEventListener(Event.CLOSE, closeHandler);myFileStream.close();trace("started.");closeHandler(event:Event):void{trace("finished.");}
该例会输出:started.finished.
你可以在异步读写操作调用后,立即设置position的值,下次读写操作将换作从那个位置开始。比如:
var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.openAsync(myFile, FileMode.UPDATE);myFileStream.position = 4000;trace(myFileStream.position); // 4000myFileStream.writeBytes(myByteArray, 0, 200);myFileStream.position = 300;trace(myFileStream.position); // 300
- 根据数据格式,选择合适的读写操作硬盘上的每个文件都是字节集合。在AS中,文件中的数据总是可以描述为ByteArray.比如下面的代码把文件数据读取到bytes这个ByteArray中:
下面的代码把数据从bytes这个ByteArray中写入文件:var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.addEventListener(Event.COMPLETE, completed);myFileStream.openAsync(myFile, FileMode.READ);var bytes:ByteArray = new ByteArray();function completeHandler(event:Event):void{myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable);}
往往我们并不希望把数据作ByteArray处理,有时候要处理的文件是特定格式,比如文件中的数据是字符串。因此FileStream类也包含ByteArray以外的数据格式读写方法,比如readMultiByte()方法,可将文件读取暂存为字符串,如下代码:var myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.open(myFile, FileMode.WRITE);myFileStream.writeBytes(bytes, 0, bytes.length);
readMultiByte()的第二个参数(本例中为“iso-8859-1”)指定了ActionScript用来解释的文本格式。ActionScript支持通用字符集编码,具体罗列在http://livedocs.macromedia.com/flex/2/langref/charset-codes.htmlvar myFile:File = File.documentsDirectory.resolvePath("Mousebomb/test.txt");var myFileStream:FileStream = new FileStream();myFileStream.addEventListener(Event.COMPLETE, completed);myFileStream.openAsync(myFile, FileMode.READ);var str:String = "";function completeHandler(event:Event):void{str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");}
FileStream 类还具有readUTFBytes()方法,从读缓存中以UTF-8字符集读取数据。由于UTF8字符集为可变长,读缓存末尾数据并不一定是完整字符,所以不要在处理progress 事件的方法中使用readUTFBytes()方法(用readMultiByte()读取可变长字符编码也应遵循此项),而应在FileStream的complete事件发生时读取完整数据集。
同样,有类似的写操作writeMultiByte()和writeUTFBytes(),用来处理字符串对象和文本文件。
readUTF()和writeUTF()方法同样是读写文本数据,不过它们假定文本数据在指定文本数据长度之前,该文本数据是不在标准文本文件里普遍应用的。有些UTF编码文本文件以一个UTF-BOM(Byte Order Mark)字符开头,像编码格式(如UTF16和UTF32)一样,也声明字节序。
readObject() 和writeObject()方法便于为复杂AS对象存取数据,数据作AMF(ActionScript Message Format)编码,此格式为ActionScript私有,AIR、Flash Player、Flash Media Server、Flex Data Services以外的程序都没有操作该格式的内建API。此外还有一些读写操作,像readDouble()和writeDouble()之类的,使用它们需确保所操作文件格式与之对应。
一般的文件结构往往比文本文件要复杂的多。比如mp3文件包含只能被mp3解压解码算法解释的压缩数据格式。其他文件,像图片、数据库、应用程序档案等等都有不同的结构,要想用AS操作它们的数据,得对其结构十分了解。
至此,学习笔记《AIR文件操作》结束。所有知识点来自:官方文档。(本文若有不当之处,敬请指出。)参考文献:http://livedocs.adobe.com/air/1/devappsflash/help.html?content=dg_part_6_1.htmlhttp://livedocs.macromedia.com/flex/2/langref/charset-codes.htmlhttp://www.adobe.com/go/learn_air_aslr
- ActionScript 读写文件
- Flash/ActionScript读写SQLite二进制字段里的图片文件
- flex actionScript读取文件
- flex文件引用actionscript文件
- ActionScript 读写本地文件的三种方式
- ActionScript
- actionscript
- actionscript
- 文件读写、剪贴板读写
- ActionScript 3外部swf文件载入
- actionscript里面如何上传文件到服务端?
- 读写文件
- 文件读写
- 读写文件
- 读写文件
- 文件读写
- 读写文件
- 读写文件
- 如何编写Socket套接字
- 弹出PopupWindow后的阴影部分
- 数据存储
- 关于python中的转义
- 单例
- ActionScript 读写文件
- 方法覆盖和方法重载
- ActionScript Loader与URLLoader的使用
- ActionScript 读写本地文件的三种方式
- 转换XML文件时去掉HTML中‘&#xD’(回车)等特殊符号
- 桌面端centos服务器上java环境和tomcat部署过程自启动以及mysql简单修改
- Java中字符串的URL中文的编码和解码
- python数据分析复盘——爬虫相关库
- ActionScript 中的无类型变量