Flex air修改外部xml文件 (转)
AIR的文件操作不难,看完教程应该可以满足你对文件的所有基本操作。这篇教程主要以实际操作中遇到的情况来讲解
我们想想文件操作都会有什么内容,无非是创建,修改,删除,移动,拷贝。在这个过程中我们会涉及到一些周边的操作,比如文件夹,文件选择器,文件列表,文件信息获取等。 我就围绕创建,修改,删除,移动,拷贝来展开我们的教程。因为内容比较多,基于迷你教程每篇都短小,易读的原则。我分为两篇,今天先讲第一篇,基本的操作,下一篇我再加入上面所说周边的操作相对深一步的讲解。
Air的文件操做主要涉及两个类,FIle和FileStream。一般来说我们不会直接以文本形式保存文件,那样的内容不易于修改,所以这里我以xml 文件为例。
Note: 下面所有的function可以直接复制到你的代码中运行
1.创建新文件。
public function createFileDemo():void{
var file:File = File.desktopDirectory.resolvePath(“test.xml”) //尝试从系统桌面获取test.xml文件。
var fileStream:FileStream = new FileStream(); // 创建FileStream 对象,用于读写文件
fileStream.open(file,FileMode.WRITE); //以WRITE方式打开file, 如果file中对应的文件不存在,创建新文件
//准备文件的内容
var content:XML =
我们的第一个文件创建完毕
fileStream.writeUTFBytes(content.toXMLString()); //像文件中写入内容。
fileStream.close(); //完成写入,这时我们打开桌面的test.txt可以看到内容。
}
上面五句代码让我在我的桌面创建了名为test.xml的文件,并且写入了content。
这里有三个地方我们要注意
1. File.desktopDirectory — 因为AIR可以在Mac和Windows下运行,所以我们最好不要指定固定的地址,这里File.desktopDirectory的意思就是指向我系统的桌面,因为我是mac,所以实际返回的是 /kevinluo/Desktop. 除此之外我们还可以得到如下面这些地址
File.documentsDirectory; //指向用户文档文件夹
File.applicationDirectory; //应用程序安装目录
File.getRootDirectories(); //文件系统根目录
等等,我就不一一列举了,具体的大家可以看File帮助中描述。
2.File.desktopDirectory.resolvePath(“test.xml”) — 获取桌面下的test.xml。这里我们还可以这样写
var file:File = File.desktopDirectory
file = file.resolvePath(“test.xml”)
不过我建议还是直接写在一排,如果像这样分开写的话,当fileStream.open(file,FileMode.WRITE) 打开文件时,如果文件不存在就会报错而不会像上面那样创建新的文件。
在使用的时候发现即使写成一行代码 , 在 fileStream.open(file,FileMode.WRITE) 打开文件时也可能报错,解决方法是:首先把file转化为string,然后再转化回来
var xml_home_path:File=new File(MapEditorConstant.APPLICATION_XML_HOME.nativePath.toString());
3. fileStream.open(file,FileMode.WRITE) –FileMode.WRITE是打开文件的方法,打开文件的方法一共有如下四种
FileMode.READ // 只读方式打开文件
FileMode.WRITE // 写方式打开文件,文件的原有内容会被清除。文件不存在的话创建新文件
FileMode.APPEND //追加方式打开文件,写入的内容总是会添加到文件的末尾。文件不存在的话创建新文件
FileMode.UPDATE //直接打开文件,可以根据需要在指定位置插入数据。文件不存在的话创建新文件
这里我们以WRITE方式创建了新文件,并写入了“我们的第一个文件创建完毕”。
2. 读取已有的文件,修改内容,再更新文件。
publuc function modifyFileDemo():void{
var file2:File = File.desktopDirectory.resolvePath(“test.xml”); //读取刚才创建的test.xml
var fs:FileStream = new FileStream();
fs.open(file2,FileMode.READ); //以只读方式打开
var ct:XML = new XML(fs.readUTFBytes(fs.bytesAvailable)); //获取xml内容
ct.content = “我们的第一个文件修改完毕” //修改content节点下的内容
fs.open(file2,FileMode.WRITE); //重新以写方式打开文件,目的在于清除原有的内容
fs.writeUTFBytes(ct.toXMLString()) //写入修改过后的XML
fs.close()
}
这里我用了READ和WRITE的组合。在实际的使用中我们可以判断一个xml文件的大小来限制单个文件写入过大。
3.删除文件。
删除文件是最简单的。
public function deleteFIleDemo():void{
var file2:File = File.desktopDirectory.resolvePath(“test.xml”);
if(file2.exists){ //判断文件是否存在
file2.deleteFile() //删除文件
}
}
如果使用file2.moveToTrash()则将文件移到垃圾箱
4.拷贝文件/移动文件
public function copyFileDemo():void{
var sourceFile:File = File.desktopDirectory.resolvePath(“test.xml”) //获取源文件
var newFile:File = File.desktopDirectory.resolvePath(“test2.xml”) //创建目标文件
sourceFile.copyTo(newFile,true) //执行拷贝,如果是移动的话sourceFile.moveTo(newFile,true)
}
5. 异步与同步
AIR对文件的操作分为异步与同步两种方式。上面1–4介绍的是同步方式,其中的一些方法有另一个异步方式,看下面的列表
File.copyTo() — File.copyToAsync()
File.moveTo() — File.moveToAsync()
File.deleteDirectory() — File.deleteDirectoryAsync()
File.deleteFile() — File.deleteFileAsync()
File.getDirectoryListing() – File.getDirectoryListingAsync()
File.moveToTrash() — File.moveToTrashAsync()
FileStream.open — FileStream.openAsync()
使用异步方式时我们需要监听EVENT.COMPLETE和IOErrorEvent.IO_ERROR事件来获取file的操作结果。我拿上面的拷贝做个例子
pirvate funnction copyFile(sourceFIlePath:String, targetFIlePath:String):void{
var sourceFile:File = File.desktopDirectory.resolvePath(sourceFIlePath) //获取源文件
var newFile:File = File.desktopDirectory.resolvePath(targetFIlePath) //创建目标文件
sourceFile.addEventListener(Event.COMPLETE,completeHandle) //监听文件操作complete事件
sourceFile.copyToAsync(newFile,true) ; //开始拷贝,异步方式
this. showLoadingBar() //打开loading图标
}
private function completeHandle():void{
Alert.show(“拷贝文件完成”)
this.closeLoadingBar() //关闭loading图标
}
异步方式的好处是我们可以从中实行一些别的操作,比如出现一个loading的提示之类。
OK, 休息了
Flex air修改外部xml文件 (转)的更多相关文章
- 【转】【Flex】#010 操作XML文件(E4X)
该教程转载来自于:http://blog.chinaunix.net/uid-14767524-id-2785506.html [看到这边文章的位置,具体原作者未知] 经过一些排版的修改,其他内 ...
- win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件
win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...
- 如何用DELPHI编程修改外部EXE文件的版本信
右击里面有修改 点开直接修改就可以了吧. DELPHI 里程序的版本信息怎么是灰色的,无法更改 耐心读以下说明,应该能解决你的问题,如果不能解决,请Hi我~ 如何给自己的dll文件添加版本信息呢? 首 ...
- tomcat7修改tomcat-users.xml文件,但服务器重启后又自动还原了。
tomcat7配置用户管理权限,修改tomcat-users.xml文件 在%tomcat%目录中找到/conf/tomcat-users.xml,修改 <tomcat-users> ...
- 创建新的servlet一定要记得修改web..xml文件!!!
创建新的servlet一定要记得修改web..xml文件!!!
- Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】
接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...
- eclipse配置tomcat后修改server.xml文件(如编码等)无效问题
我们用eclipse配置好tomcat后,在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml等文件. 修改后重启Tomcat服务器时发现xml文件又被还原了. 因为Tomc ...
- FLEX AIR 读写安卓本地文件
1. 目标: 将字节流图片保存在安卓本地路径,如 "/data/mypppd/"下, file = File.documentsDirectory.resolvePath(&qu ...
- DOS 批处理 修改xml文件
之前对批处理和dos只停留在cd ping ipconfig水平,我以为改个文件应该很简单吧,把文件读出来做个替换再写回去不就欧了,百度个例子改改,那还不是分分钟的事,哪知道事实比想的要复杂的多. 我 ...
随机推荐
- 调试python程序
pdb 关键步骤 python -m pdb ***.py n 单步
- Dojo
dojo的类机制支持类声明.继承.调用父类方法等功能.dojo在底层实现上是通过操作原型链来实现其类机制的,而在实现继承时采用类式继承的方式.值得一提的是,dojo的类机制允许进行多重继承(注意,只有 ...
- easyui datebox 扩展清空按钮及日期判断
<input id="EndHavDate" class="easyui-datebox" data-options="prompt:'请选择结 ...
- dis进行反编译
摘录自官方文档: https://docs.python.org/2/library/dis.html 回头自己也脑补下. 可以使用dis查看自己代码的复杂度之类的东西. 比如while 1 和whi ...
- css技巧收集
1. 使用 :not() 为导航添加/取消边框 传统的方法为导航栏添加边框: /* add border */ .nav li { border-right: 1px solid #666; } /* ...
- js或者ext js获取返回值
由于前台业务需要在判断中发起ajax到后台,根据返回值校验是否通过 代码如下 关键点在于要将async关闭 设置成同步,这样才能接收到要返回的flag ...
- PPPoE(以太网上的点对点协议)
协议概述 PPPoE分为两个阶段,即Discovery(地址发现)阶段和PPP会话阶段.当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个 ...
- windows 下 putty 登陆服务器 显示matlab图形界面
本文需要下载 putty.exe 和 pscp.exe :http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html Xming 主 ...
- jquery的ajax和jsonp的写法
交互 ajax jsonp ajax跟之前一模一样 $(document).ready(function(){ $.ajax({ url:'get.php', ...
- 【Cocos2d-x 3.x】 动作类Action源码分析
游戏设计中,动作是不可缺少的,Cocos2d-x中所有的动作都继承自Action类,而Action类继承自Ref和Clonable类,整个动作类继承体系如图: FiniteTimeAction是所有瞬 ...