flex读取本地文件,修改,并保存到本地
原创
©著作权归作者所有:来自51CTO博客作者1058106015的原创作品,请联系作者获取转载授权,否则将追究法律责任
开发环境:FlexBuilder4.6
test.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
private var file:FileReference = new FileReference();
private var parentPath:String = null;
private var fileName:String=null;
/**
* 读取要修改的文件
**/
protected function readFile(event:MouseEvent):void
{
var filter:FileFilter=new FileFilter("提示文件类型*.*", "*.*");
file.addEventListener(Event.SELECT,selectedFile);
file.browse([filter]);
}
/**
* 选择文件
* */
protected function selectedFile(e:Event):void{
if(e.target.size > 524288){
Alert.show("要读取的文件大于512KB,请重新选择文件");
return;
}
fileName = e.target.name;
file.load();
file.addEventListener(Event.COMPLETE,getData);
}
/**
* 获取文件
* */
protected function getData(e:Event):void{
var dataArr:ByteArray = file.data;
var dataStr:String;
dataArr.position = 0;
dataStr = dataArr.readUTFBytes(dataArr.length);
content.text = dataStr;
}
/**
*
* 修改完成后,将文本框中的内容保存到指定路径
* */
protected function saveContentHandler(event:MouseEvent):void
{
if(content.text==null || content.text==""){
Alert.show("请先选择文件修改,然后保存");
return;
}
var sfile:FileReference = new FileReference();
sfile.save(content.text, fileName);
sfile.addEventListener(Event.COMPLETE,fileSaved);
}
/**
* 文件保存成功
* */
protected function fileSaved(event:Event):void{
Alert.show("文件保存成功!");
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:VGroup width="80%" x="10" y="10">
<s:Label text="选择文件" />
<s:Button label="选取文件" id="secFileBtn" click="readFile(event)" />
<s:Label id="secFilePath" fontSize="16" fontWeight="bold" color="0x0050AA"/>
<s:TextArea id="content" width="600" height="400"/>
<s:Button label="保存" id="saveContent" click="saveContentHandler(event)"/>
</s:VGroup>
</s:Application>
采用此方法:第一:不需要获取文件的绝对路径,就可直接读取文件。
第二:秒杀网上所谓的通过JS回调方式获取(经测试,网上那种方式存在问题,每次获取的路径都是都是C:/fakepath/文件名).
第三:目前只支持文本格式存储的数据,当数据量过大(超过几M)时,读取到文本框中的数据很卡。
适用范围: 对配置文件的修改,或者动态配置文件的访问修改(文本格式,数据量较小)