air 读写文件
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();
}
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已经正常生成.

浙公网安备 33010602011771号