Adobe AIR對本地文件(XML文件)的操做

引用:http://addiwang.blog.163.com/blog/static/118130772011221114230288/html

Air的文件操作主要涉及兩個類,FIle和FileStream。通常來講咱們不會直接以文本形式保存文件,那樣的內容不易於修改,因此這裏我以 xml 文件爲例。app

Note: 下面全部的function能夠直接複製到你的代碼中運行異步

1.建立新文件。this

public function createFileDemo():void{spa

var file:File = File.desktopDirectory.resolvePath("test.xml")  //嘗試從系統桌面獲取test.xml文件。 
var fileStream:FileStream = new FileStream(); // 建立FileStream 對象,用於讀寫文件 
fileStream.open(file,FileMode.WRITE);  //以WRITE方式打開file, 若是file中對應的文件不存在,建立新文件.net

//準備文件的內容 
var content:XML = <root> 
                         <content> 咱們的第一個文件建立完畢</content>          
                        </root> 
fileStream.writeUTFBytes(content.toXMLString()); //像文件中寫入內容。 
fileStream.close(); //完成寫入,這時咱們打開桌面的test.txt能夠看到內容。xml

}htm

上面五句代碼讓我在個人桌面建立了名爲test.xml的文件,而且寫入了content。對象

這裏有三個地方咱們要注意blog

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的提示之類。

相關文章
相關標籤/搜索