现在的位置: 首页 > 综合 > 正文

air 读写文件

2012年11月21日 ⁄ 综合 ⁄ 共 3795字 ⁄ 字号 评论关闭

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已经正常生成.

抱歉!评论已关闭.