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