Flex AIR 文件對象操作

功能1、指向目錄和文件

File對象有兩個屬性都能定義文件路徑,它們是nativePath和url。nativePath是在特定平臺使用的文件路徑(主要就是Windows和MacOs上的路徑表示不同),url則是統一的”file:///c:/Sample%20directory/test.txt”這樣的表示方法。

 

我們來看幾個指向目錄的實例,其中1-7演示瞭如何獲取特殊目錄: 

var file:File = File.userDirectory; //指向用戶文件夾 

var file:File = File.documentsDirectory; //指向用戶文檔文件夾 

var file:File = File.desktopDirectory; //指向桌面

var file:File = File.applicationStorageDirectory; //指向應用程序存儲目錄(參見AIR的URL方案) 

 

var dir:File = File.applicationDirectory; //應用程序安裝目錄 

var dir:File = File.getRootDirectories(); //文件系統根目錄 

還有一招,指向請求啓動該應用程序的目錄,先空着,以後補上。參考資料見《Capturingcommand line arguments》 

var file:File = new File(); 

file.nativePath = "C:\\Mousebomb\\"; 

//(windows平臺)指向一個具體的目錄,這裏使用了nativePath屬性,”C:\\Mousebomb\\”只適用windows中。 

 

var file:File = File.userDirectory; 

file = file.resolvePath(”Mousebomb”); 

//跳轉到用戶目錄下的Mousebomb目錄 

var urlStr:String = "file:///C:/Mousebomb/"; 

var file:File = new File() 

file.url = urlStr; 

//指向c盤下的Mousebomb目錄,這裏使用了url屬性 

/*讓用戶選擇目錄*/

var file:File = new File(); 

file.addEventListener(Event.SELECT, dirSelected); 

file.browseForDirectory("Select a directory");

function dirSelected(e:Event):void { 

trace(file.nativePath); 

下面看看指向文件的實例: 

 

指向明確的文件地址: 

var file:File = File.applicationStorageDirectory; 

file = file.resolvePath("Flashj.txt");

使用url屬性的例子: 

var urlStr:String = "file:///C:/Mousebomb/Flashj.txt"; 

var file:File = new File() 

file.url = urlStr; 

當然你也可以直接這樣寫

var urlStr:String = "file:///C: /Mousebomb/Flashj.txt"; 

var file:File = new File(urlStr); 

//url中的空格會被%20替換 

使用nativePath屬性: 

var file:File = new File(); 

file.nativePath = "C:/ Mousebomb/Flashj.txt"; 

或者 

var file:File = new File("C:/ Mousebomb/Flashj.txt"); 

//(Windows下) 

通過對話框讓用戶選擇文件 

實現這個功能需要認識三個方法: 

browseForOpen() 

browseForSave() 

browseForOpenMultiple() 

三個方法都是異步的,browseForOpen() 和 browseForSave()方法在用戶選擇文件時會觸發select事件,在選擇了某文件時,File指向選擇的文件。 而browseForOpenMultiple()方法會觸發selectMultiple事件,該事件屬於FileListEvent型,它的屬性中具有指向所選文件的File對象數組。

例子: 

var fileToOpen:File = File.documentsDirectory; 

selectTextFile(fileToOpen); 

function selectTextFile(root:File):void 

var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");

root.browseForOpen("Open", [txtFilter]); 

root.addEventListener(Event.SELECT, fileSelected); 

function fileSelected(event:Event):void 

trace(fileToOpen.nativePath); 

 

功能2、拷貝文件和目錄 

拷貝文件使用到的方法有copyTo()和copyToAsync(),詳見AIR文件基礎,前者爲同步方法,後者爲異步方法。

要拷貝文件,需要創建2個File對象,一個指向原文件,一個指向目標文件。像下面兩例: 

 

1.同步拷貝例: 

var original:File = File.documentsDirectory.resolvePath("Mousebomb/FlashJ.txt"); 

var newFile:File = File.resolvePath("Mousebomb/FlashJcn.txt"); 

original.copyTo(newFile, true); 

第二個參數true表示覆蓋存在的文件,默認值是false,若設置爲false,而拷貝的目標文件已經存在,則AIR會發出IOErrorEvent事件。 

 

2.異步拷貝例: 

var original = File.documentsDirectory; 

original = original.resolvePath("Mousebomb/FlashJ.txt"); 

var destination:File = File.documentsDirectory; 

destination = destination.resolvePath("FlashJ/FlashJcn.txt"); 

original.addEventListener(Event.COMPLETE, fileCopyCompleteHandler); 

original.addEventListener(IOErrorEvent.IO_ERROR, fileCopyIOErrorEventHandler); 

original.CopyToAsync(destination); 

function fileCopyCompleteHandler(event:Event):void { 

trace(event.target); // [object File] 

function fileCopyIOErrorEventHandler(event:IOErrorEvent):void { 

trace("I/O Error."); 

 

功能3、移動文件和目錄 

移動文件使用的方法有moveTo()和MoveToAsync(),不僅長相類似,連使用方法都與拷貝文件一樣,可以直接參考上文。

 

功能4、刪除文件和目錄(或移至回收站) 

deleteFile()和deleteFileAsync()負責刪除功能,而moveToTrash()和moveToTrashAsync()功能是移至回收站。先創建一個File對象指向某個文件或目錄,然後執行四個方法之一,處理異步方法要加事件監聽。

var file:File = File.documentsDirectory.resolvePath("DeleteMe.txt"); 

file.moveToTrash(); 

 

功能5、列出某目錄中的文件和目錄 

可以使用getDirectoryListing()方法和getDirectoryListingAsync()方法獲取某個目錄下文件與子目錄的File指針數組。

例如: 

var directory:File = File.documentsDirectory; 

var contents:Array = directory.getDirectoryListing(); 

for (var i:uint = 0; i < contents.length; i++) 

trace(contents[i].name, contents[i].size); 

本例輸出了用戶文檔目錄中的文件名和大小。 

若使用異步方法,例如: 

var directory:File = File.documentsDirectory; 

directory.getDirectoryListingAsync(); 

directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler); 

function dirListHandler(event:FileListEvent):void 

var contents:Array = event.files; 

for (var i:uint = 0; i < contents.length; i++) 

trace(contents[i].name, contents[i].size); 

其中directoryListing事件對象中有個files屬性,爲目錄下內容的File指針數組。

 

功能6、創建臨時文件和文件夾 

使用createTempFile()和createTempDirectory()方法可以創建臨時文件和文件夾。 

var temp:File = File.createTempFile(); //在系統臨時文件夾下創建臨時文件 

createTempFile()方法會自動創建一個唯一的臨時文件。 

createTempDirectory ()方法會自動創建一個唯一的臨時文件夾。 

你可以用臨時文件來臨時存儲應用程序回話中的信息。 

由於臨時文件不會自動刪除,所以你可能得讓應用程序在關閉前刪除它。 

 

功能7、創建目錄 

使用createDirectory()方法可以創建目錄,例如: 

var dir:File = File.userDirectory.resolvePath("Mousebomb"); 

dir.createDirectory(); 

這個例子在用戶文件夾下創建了Mousebomb目錄,如果Mousebomb目錄存在,則不會作出操作。 

 

功能8、讀取文件信息 

File類中包含以下屬性,提供File對象所指向文件或目錄的信息。

 

屬性 描述

creationDate 創建日期 

exists 是否存在 

extension 擴展名,若無則爲null 

icon 該文件的圖標對象

isDirectory 是否目錄 

modificationDate 修改日期

name 文件名(包括擴展名) 

nativePath 特定平臺使用的文件路徑 

parent 父級目錄,若該File對象就是頂級則此屬性爲null 

size 字節大小 

url 統一資源定位符

詳細參見AIR ActionScript. 3.0 Language Reference for Adobe AIR.

 

功能9、獲取文件系統信息 

File類包含一下靜態屬性,提供有用的文件系統信息(主要是跨平臺使用): 

 

屬性 描述 

File.lineEnding 系統的行結束符 

File.separator 系統的分隔符(Windows下爲\ Mac Os爲/) 

File.systemCharset 系統的默認文件編碼,屬於系統所使用的字符集 

 

順便插進Capabilities類包含的靜態屬性: 

 

屬性 描述 

Capabilities.hasIME 當前運行的系統是否安裝了輸入法編輯器

Capabilities.language 當前運行的系統的語言編碼 

Capabilities.os 當前運行的操作系統

 

轉:http://blog.csdn.net/xhhuang1979/article/details/7300759

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章