1. 程式人生 > >AIR文件操作(二):使用文件對象操作文件和目錄

AIR文件操作(二):使用文件對象操作文件和目錄

設置 move void 事件 table rst 默認 show .cn

轉載於:http://www.flashj.cn/wp/air-file-operation2.html

文件對象是啥?
文件對象(File對象)是在文件系統中指向文件或目錄的指針。由於安全原因,只在AIR中可用。

文件對象能做啥?

  1. 獲取特定目錄,包括用戶目錄、用戶文檔目錄、該應用程序啟動的目錄和程序目錄
  2. 拷貝文件和目錄
  3. 移動文件和目錄
  4. 刪除文件和目錄(或移至回收站)
  5. 列出某目錄中的文件和目錄
  6. 創建臨時文件和文件夾
  7. 創建目錄
  8. 讀取文件信息
  9. 獲取文件系統信息

在AIR中,我們用FileStream讀寫文件的前提就是用File對象來指向文件。

那麽文件對象具體怎麽玩呢?

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

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

    1. var file:File = File.userDirectory; //指向用戶文件夾
    1. var file:File = File.documentsDirectory; //指向用戶文檔文件夾
    1. var file:File = File.desktopDirectory; //指向桌面
    1. var file:File = File.applicationStorageDirectory; //指向應用程序存儲目錄

    (參見AIR的URL方案)

    1. var dir:File = File.applicationDirectory; //應用程序安裝目錄
    1. var dir:File = File.getRootDirectories(); //文件系統根目錄
  1. 還有一招,指向請求啟動該應用程序的目錄,先空著,以後補上。參考資料見《Capturing command
    line arguments》
    1. var file:File = new File();
    2. file.nativePath = "C:Mousebomb";

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

  2. var file:File = File.userDirectory;
    file = file.resolvePath(“Mousebomb”);
    //跳轉到用戶目錄下的Mousebomb目錄
    1. var urlStr:String = "file:///C:/Mousebomb/";
    2. var file:File = new File()
    3. file.url = urlStr;
    4. //指向c盤下的Mousebomb目錄,這裏使用了url屬性
    1. /*讓用戶選擇目錄*/
    2. var file:File = new File();
    3. file.addEventListener(Event.SELECT, dirSelected);
    4. file.browseForDirectory("Select a directory");
    5. function dirSelected(e:Event):void {
    6. trace(file.nativePath);
    7. }

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

  1. 指向明確的文件地址:
    1. var file:File = File.applicationStorageDirectory;
    2. file = file.resolvePath("Flashj.txt");
  2. 使用url屬性的例子:
    1. var urlStr:String = "file:///C:/Mousebomb/Flashj.txt";
    2. var file:File = new File()
    3. file.url = urlStr;
  3. 當然你也可以直接這樣寫
    1. var urlStr:String = "file:///C: /Mousebomb/Flashj.txt";
    2. var file:File = new File(urlStr);
    3. //url中的空格會被%20替換
  4. 使用nativePath屬性:
    1. var file:File = new File();
    2. file.nativePath = "C:/ Mousebomb/Flashj.txt";
  5. 或者
    1. var file:File = new File("C:/ Mousebomb/Flashj.txt");
    2. //(Windows下)
  6. 通過對話框讓用戶選擇文件
    實現這個功能需要認識三個方法:
    browseForOpen()
    browseForSave()
    browseForOpenMultiple()
    三個方法都是異步的,browseForOpen() 和 browseForSave()方法在用戶選擇文件時會觸發select事件,在選擇了某文件時,File指向選擇的文件。 而browseForOpenMultiple()方法會觸發selectMultiple事件,該事件屬於FileListEvent型,它的屬性中具有指向所選文件的File對象數組。
    例子:

    1. var fileToOpen:File = File.documentsDirectory;
    2. selectTextFile(fileToOpen);
    3. function selectTextFile(root:File):void
    4. {
    5. var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
    6. root.browseForOpen("Open", [txtFilter]);
    7. root.addEventListener(Event.SELECT, fileSelected);
    8. }
    9. function fileSelected(event:Event):void
    10. {
    11. trace(fileToOpen.nativePath);
    12. }

功能2、拷貝文件和目錄
拷貝文件使用到的方法有copyTo()和copyToAsync(),詳見AIR文件基礎,前者為同步方法,後者為異步方法。
要拷貝文件,需要創建2個File對象,一個指向原文件,一個指向目標文件。像下面兩例:
1.同步拷貝例:

  1. var original:File = File.documentsDirectory.resolvePath("Mousebomb/FlashJ.txt");
  2. var newFile:File = File.resolvePath("Mousebomb/FlashJcn.txt");
  3. original.copyTo(newFile, true);

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

  1. var original = File.documentsDirectory;
  2. original = original.resolvePath("Mousebomb/FlashJ.txt");
  3. var destination:File = File.documentsDirectory;
  4. destination = destination.resolvePath("FlashJ/FlashJcn.txt");
  5. original.addEventListener(Event.COMPLETE, fileCopyCompleteHandler);
  6. original.addEventListener(IOErrorEvent.IO_ERROR, fileCopyIOErrorEventHandler);
  7. original.CopyToAsync(destination);
  8. function fileCopyCompleteHandler(event:Event):void {
  9. trace(event.target); // [object File]
  10. }
  11. function fileCopyIOErrorEventHandler(event:IOErrorEvent):void {
  12. trace("I/O Error.");
  13. }

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

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

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

功能5、列出某目錄中的文件和目錄
可以使用getDirectoryListing()方法和getDirectoryListingAsync()方法獲取某個目錄下文件與子目錄的File指針數組。
例如:

  1. var directory:File = File.documentsDirectory;
  2. var contents:Array = directory.getDirectoryListing();
  3. for (var i:uint = 0; i < contents.length; i++)
  4. {
  5. trace(contents[i].name, contents[i].size);
  6. }

本例輸出了用戶文檔目錄中的文件名和大小。
若使用異步方法,例如:

  1. var directory:File = File.documentsDirectory;
  2. directory.getDirectoryListingAsync();
  3. directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
  4. function dirListHandler(event:FileListEvent):void
  5. {
  6. var contents:Array = event.files;
  7. for (var i:uint = 0; i < contents.length; i++)
  8. {
  9. trace(contents[i].name, contents[i].size);
  10. }
  11. }

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

功能6、創建臨時文件和文件夾
使用createTempFile()和createTempDirectory()方法可以創建臨時文件和文件夾。
var temp:File = File.createTempFile(); //在系統臨時文件夾下創建臨時文件
createTempFile()方法會自動創建一個唯一的臨時文件。
createTempDirectory ()方法會自動創建一個唯一的臨時文件夾。
你可以用臨時文件來臨時存儲應用程序回話中的信息。
由於臨時文件不會自動刪除,所以你可能得讓應用程序在關閉前刪除它。

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

  1. var dir:File = File.userDirectory.resolvePath("Mousebomb");
  2. 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://livedocs.adobe.com/air/1/devappsflash/help.html?content=dg_part_6_1.html(文件與數據)
(本文若有不當之處,敬請指出。)

AIR文件操作(二):使用文件對象操作文件和目錄