Flex air修改外部xml文件

[size=medium]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, 休息了[/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章