FileReference:
package com { import flash.display.Bitmap; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.URLLoader; import flash.utils.ByteArray; import mx.messaging.channels.StreamingAMFChannel; public class FileFiag extends Sprite { private var fileR:FileReference; private var _bitmap:Bitmap; private var _xml:XML; private var load_type:String=""; public function FileFiag() { init(); } private function init():void { fileR=new FileReference(); fileR.addEventListener(Event.SELECT, onFileSelected); fileR.addEventListener(Event.CANCEL, onCancel); fileR.addEventListener(IOErrorEvent.IO_ERROR, onIOError); } private function onFileSelected(event:Event):void { fileR.addEventListener(ProgressEvent.PROGRESS,onProgress); fileR.addEventListener(Event.COMPLETE, onComplete); fileR.load(); } private function onProgress(event:ProgressEvent):void { } private function onComplete(event:Event):void { switch(fileR.extension) { case "png": ImageLoad(); break; case "xml": XmlLoad(event); break; } } private function CompleteHandler(event:Event):void { if(event.target.content is Bitmap) { this._bitmap=event.target.content as Bitmap; } dispatchEvent(event); } private function onCancel(event:Event):void { } private function onIOError(event:IOErrorEvent):void { } public function OpenFile(bol:Boolean):void { var typeFilter:FileFilter if(bol) { typeFilter=new FileFilter("Images(*.jpg,*.jpeg,*.gif,*.png)","*.jpg;*.jpeg;*.gif;*.png");//设置可读格式 } else { typeFilter=new FileFilter("xml(*.xml)","*.xml") } fileR.browse([typeFilter]); } private function ImageLoad():void { this.load_type="png"; var loader:Loader=new Loader(); var bt:ByteArray=fileR.data as ByteArray; loader.loadBytes(bt); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,CompleteHandler); } private function XmlLoad(event:Event):void { this.load_type="xml"; var urlloader:URLLoader=new URLLoader(); this._xml=new XML(this.fileR.data); dispatchEvent(event); } public function get loadType():String { return this.load_type; } public function get bitmap():Bitmap { return _bitmap; } public function set bitmap(value:Bitmap):void { _bitmap = value; } public function get xml():XML { return _xml; } public function set xml(value:XML):void { _xml = value; } } }
public static function BornXml(_ui:UIComponent,_bit:Bitmap):void { var xml:XML=<root url={File.applicationDirectory.resolvePath("data/map.png").nativePath.toString()}></root>; for(var i:int=0;i<_ui.numChildren;i++) { if(_ui.getChildAt(i) is Flag) { var flag:Flag=_ui.getChildAt(i) as Flag; xml.appendChild(<pic x={flag.x} y={flag.y} name={flag.txt.text}/>) } } trace("目录: "+_bit.width); var filexml:File = new File(File.applicationDirectory.resolvePath("data/map.xml").nativePath); var png:PNGEncoder=new PNGEncoder(); var by:ByteArray=png.encode(_bit.bitmapData); var fileimg:File=new File(File.applicationDirectory.resolvePath("data/map.png").nativePath); var stream:FileStream = new FileStream; stream.open(filexml, FileMode.WRITE); stream.writeMultiByte(xml.toString(), "utf-8"); stream.open(fileimg, FileMode.WRITE); stream.writeBytes(by); stream.close(); }
必须先open 然后write 。如果相互混合会出现错误。切记。
AIR中..保存文件我们般会像下面这样操作
var file:File = new File("C:\\abc.txt")
var fs:FileStream = new FileStream()
fs.open(file,FileMode.WRITE)
fs.position = 0
fs.writeUTFBytes("http://l4cd.net")
fs.close()
这样就会在C盘生成一个内容为"http://l4cd.net"的abc.txt文件..
另外,如果想在安装目录保存一些AIR的配置什么的..
常用的方法是通用File.applicationDirectory来获取安装目录的file对象,再用resolvePath来指定某个文件
像
var file:File = File.applicationDirectory.resolvePath("ini.xml")
这样就会生成一个安装目录下的ini.xml文件的file对象..
可是值得注意的是..当这样获取file对象再进行操作时..会有安全问题
保存代码执行后会出现
SecurityError: fileWriteResource
at runtime::SecurityManager$/checkPrivilegeForCaller()
at flash.filesystem::FileStream/open()
我们必须使用
var file:File = new File(File.applicationDirectory.resolvePath("ini.xml").nativePath);
简单来说必须以文件的路径String来new File.
执行后操作正常..打开AIR的安装目录..发现ini.xml已经正常生成.