您的位置:首页 > 大数据 > 人工智能

Adobe AIR迷你教程 -- 本地文件(XML文件)的操作

2010-12-23 18:12 281 查看

Adobe AIR迷你教程 -- 本地文件(XML文件)的操作

http://www.flexcoders.cn/AIR/thread-2836-1-1.aspx

Adobe AIR迷你教程 -- 本地文件(XML文件)的操作(1)

买了战争机器2,写完教程准备杀到睡觉,现在先做第一步,写教程。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 = <root>

<content>
我们的第一个文件创建完毕</content>
</root>

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)
打开文件时,如果文件不存在就会报错而不会像上面那样创建新的文件。

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的提示之类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: