在 AIR 中使用 File 物件

Adobe AIR 1.0 以及更新的版本

File 物件是指向檔案系統中檔案或資料夾的指標。

File 類別會擴充 FileReference 類別。FileReference 類別 (在 Adobe® Flash® Player 和 AIR 中都可以使用) 代表檔案的指標。File 類別會加入 Flash Player (在瀏覽器中執行的 SWF 檔) 基於安全考量而未公開的屬性和方法。

關於 File 類別

您可以使用 File 類別執行下列工作:

  • 取得特殊目錄 (包括使用者目錄、使用者的文件目錄、應用程式的啟動目錄,以及應用程式目錄) 的路徑

  • 複製檔案及目錄

  • 移動檔案及目錄

  • 刪除檔案及目錄 (或者將它們移至垃圾桶)

  • 列出某個目錄中包含的檔案及目錄

  • 建立暫存檔案及資料夾

一旦 File 物件指向某個檔案路徑,您就可以使用 FileStream 類別,經由這個路徑來讀取和寫入檔案資料。

File 物件可以指向還不存在的檔案或目錄路徑。因此,您可以使用這類 File 物件建立檔案或目錄。

File 物件的路徑

每一個 File 物件都有兩個屬性,每一個屬性都會定義自己的路徑:

屬性

說明

nativePath

指定檔案的平台專屬路徑。例如,在 Windows 中的路徑會是「c:\Sample directory\test.txt」;而在 Mac OS 中則是「/Sample directory/test.txt」。在 Windows 中, nativePath 屬性會使用反斜線 (\) 字元做為目錄分隔符號字元;而在 Mac OS 和 Linux 中,則是使用正斜線 (/) 字元。

url

這個屬性會使用 file URL 配置來指向檔案。例如,在 Windows 中的路徑會是「file:///c:/Sample%20directory/test.txt」;而在 Mac OS 中則是「file:///Sample%20directory/test.txt」。除了 file 以外,執行階段還包括其它特殊的 URL 配置。如需詳細資訊,請參閱 支援的 AIR URL 配置

File 類別包含可在 Mac OS、Windows 和 Linux 中指向標準目錄的靜態屬性。這些屬性包括:

  • File.applicationStorageDirectory — 每個已安裝 AIR 應用程式唯一的儲存目錄。此目錄是儲存動態應用程式資源和使用者偏好設定的適當位置。請考慮在其他位置儲存大量的資料。

    在 Android 和 iOS 上,當應用程式解除安裝或是使用者選擇清除應用程式資料時,會移除應用程式儲存目錄,但是在其他平台上則不是這樣。

  • File.applicationDirectory —安裝應用程式 (與任何其他已安裝的資產) 的目錄在某些作業系統上,會將應用程式儲存在單一套件檔案中,而不是實體目錄中。在此情況下,可能無法使用原生路徑來存取內容。應用程式目錄是唯讀。

  • File.desktopDirectory — 使用者桌面目錄。如果平台未定義桌面目錄,則會使用檔案系統上的其他位置。

  • File.documentsDirectory — 使用者文件目錄。如果平台未定義文件目錄,則會使用檔案系統上的其他位置。

  • File.userDirectory — 使用者目錄。如果平台未定義使用者目錄,則會使用檔案系統上的其他位置。

備註: 當平台沒有為桌面、文件或使用者目錄定義標準位置時, File.documentsDirectory File.desktopDirectory File.userDirectory 可以參照相同的目錄。

這些屬性在不同作業系統上各有不同的值。例如,Mac 和 Windows 對於使用者的桌面目錄各有不同的原生路徑。不過, File.desktopDirectory 屬性會指向每個平台上適當的目錄路徑。若要撰寫可跨平台使用的應用程式,請使用此屬性做為基礎,讓應用程式參照到所用的其他目錄和檔案。然後使用 resolvePath() 方法來修改路徑。例如,此程式碼會指向應用程式儲存目錄中的 preferences.xml 檔案:

var prefsFile:File = File.applicationStorageDirectory; 
prefsFile = prefsFile.resolvePath("preferences.xml");

雖然 File 類別可讓您指向特定檔案路徑,但這麼做會讓應用程式無法跨平台使用。例如,C:\Documents and Settings\joe\ 這個路徑僅適用於 Windows。因此,最好使用 File 類別的靜態屬性,如 File.documentsDirectory

一般目錄位置

平台

目錄類型

一般檔案系統位置

Android

應用程式

/data/data/

應用程式儲存區

/data/data/air.applicationID/filename/Local Store

快取

/data/data/applicationID/cache

桌上型

/mnt/sdcard

文件

/mnt/sdcard

暫存

/data/data/applicationID/cache/FlashTmp.randomString

使用者

/mnt/sdcard

iOS

應用程式

/var/mobile/Applications/uid/filename.app

應用程式儲存區

/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store

快取

/var/mobile/Applications/uid/Library/Caches

桌上型

無法存取

文件

/var/mobile/Applications/uid/Documents

暫存

/private/var/mobile/Applications/uid/tmp/FlashTmpNNN

使用者

無法存取

Linux

應用程式

/opt/filename/share

應用程式儲存區

/home/userName/.appdata/applicationID/Local Store

桌上型

/home/userName/Desktop

文件

/home/userName/Documents

暫存

/tmp/FlashTmp.randomString

使用者

/home/userName

Mac

應用程式

/Applications/filename.app/Contents/Resources

應用程式儲存區

/Users/ userName /Library/Preferences/ applicationid /Local Store (AIR 3.2 和更早版本)

path /Library/Application Support/ applicationid /Local Store (AIR 3.3 和更新版本),其中 path 是 /Users/ userName /Library/Containers/ bundle-id /Data (安全執行程序的環境) 或 /Users/userName (若在安全執行程序環境外執行)

快取

/Users/userName/Library/Caches

桌面

/Users/ userName /Desktop

文件

/Users/ userName /Documents

暫存

/private/var/folders/JY/randomString/TemporaryItems/FlashTmp

使用者

/Users/ userName

Windows

應用程式

C:\Program Files\filename

應用程式儲存區

C:\Documents and settings\userName\ApplicationData\applicationID\Local Store

快取

C:\Documents and settings\userName\Local Settings\Temp

桌上型

C:\Documents and settings\userName\Desktop

文件

C:\Documents and settings\userName\My Documents

暫存

C:\Documents and settings\userName\Local Settings\Temp\randomString.tmp

使用者

C:\Documents and settings\userName

這些目錄的實際原生路徑會隨作業系統與電腦組態而異。在這個表格顯示的路徑為一般範例。您應該總是使用適當的靜態 File 類別屬性以參照這些目錄,這樣您的應用程式即可在任何平台上正常運作。在實際的 AIR 應用程式中,會從應用程式描述器取得表格中顯示的 applicationID filename 值。如果您在應用程式描述器中指定發行者 ID,那麼發行者 ID 會附加至這些路徑中的應用程式 ID。 userName 的值是安裝使用者的帳戶名稱。

將 File 物件指向目錄

有多種方式可以將 File 物件設定為指向某個目錄。

指向使用者的主目錄

您可以將 File 物件指向使用者的主目錄。下列程式碼會將 File 物件設定為指向主目錄的 AIR Test 子目錄:

var file:File = File.userDirectory.resolvePath("AIR Test"); 

指向使用者的文件目錄

您可以將 File 物件指向使用者的文件目錄。下列程式碼會將 File 物件設定為指向文件目錄的 AIR Test 子目錄:

var file:File = File.documentsDirectory.resolvePath("AIR Test");

指向桌面目錄

您可以將 File 物件指向桌面。下列程式碼會將 File 物件設定為指向桌面的 AIR Test 子目錄:

var file:File = File.desktopDirectory.resolvePath("AIR Test");

指向應用程式儲存目錄

您可以將 File 物件指向應用程式儲存目錄。對於每一個 AIR 應用程式而言,都有一個可定義應用程式儲存目錄的唯一相關聯路徑。這個目錄對於每一個應用程式與使用者而言都具有唯一性。您可以使用這個目錄,儲存使用者和應用程式的專屬資料 (例如使用者資料或偏好設定檔案)。例如,下列程式碼會將 File 物件指向 prefs.xml 這個偏好設定檔案,這個檔案位於應用程式儲存目錄中:

var file:File = File.applicationStorageDirectory; 
file = file.resolvePath("prefs.xml");

這個應用程式儲存目錄的位置通常是根據使用者名稱和應用程式 ID 而定。此處所提供的下列檔案系統位置是用以協助您進行應用程式除錯。您永遠都應該使用 File.applicationStorage 屬性或 app-storage: URI 配置,來解析此目錄中的檔案:

  • 在 Mac OS 上 — 依 AIR 版本而不同:

    AIR 3.2 和更早版本 /Users/user name/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 和更新版本 path /Library/Application Support/ applicationID /Local Store ,其中 path /Users/ username /Library/Containers/ bundle-id /Data (安全執行程序的環境) 或 /Users/ username (若在安全執行程序環境外執行)

    例如 (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • 在 Windows 中,則是位於 Documents and Settings 目錄內,位置為:

    C:\Documents and Settings\user name \Application Data\ applicationID \Local Store\

    例如:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Linux—位於:

    /home/ 使用者名稱 /.appdata/ applicationID /Local Store/

    例如:

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • Android—位於:

    /data/data/ androidPackageID / applicationID/Local Store

    例如:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
備註: 如果應用程式具有發行者 ID,則發行者 ID 也會做為應用程式儲存目錄路徑的一部分。

使用 File.applicationStorageDirectory 建立之 File 物件的 URL (以及 url 屬性) 會使用 app-storage URL 配置 (請參閱 支援的 AIR URL 配置 ),如下所示:

var dir:File = File.applicationStorageDirectory; 
dir = dir.resolvePath("preferences"); 
trace(dir.url); // app-storage:/preferences

指向應用程式目錄

您可以將 File 物件指向應用程式的安裝目錄 (也就是應用程式目錄)。您可以使用 File.applicationDirectory 屬性參考這個目錄。您可以使用這個目錄,檢查與應用程式一併安裝的應用程式描述器檔案或其它資源。例如,下列程式碼會將 File 物件指向應用程式目錄中名為 images 的目錄:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 

使用 File.applicationDirectory 建立之 File 物件的 URL (以及 url 屬性) 會使用 app URL 配置 (請參閱 支援的 AIR URL 配置 ),如下所示:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
備註: 在 Android 上,應用程式套件中的檔案無法透過 nativePath 來存取。 nativePath 屬性是空的字串。永遠使用 URL 存取應用程式目錄中的檔案,而非使用原生路徑。

指向快取目錄

您可以使用 File.cacheDirectory 屬性,將 File 物件指向作業系統的暫存或快取目錄。這個目錄包含的暫存檔案並非應用程式執行所需的檔案,而且若遭到刪除,也不會對使用者造成任何問題或資料遺失。

在大多數的作業系統中,快取目錄屬於暫存目錄。在 iOS 上,快取目錄相當於應用程式元件庫的 Caches 目錄。這個目錄中的檔案不會備份到線上儲存空間,並且若裝置的可用儲存空間不足,很可能會遭到作業系統刪除。如需詳細資訊,請參閱 控制檔案備份和快取

指向檔案系統根目錄

File.getRootDirectories() 方法會列出 Windows 電腦中的所有根磁碟,例如 C: 和掛接式磁碟。在 Mac OS 和 Linux 中,這個方法一定會傳回電腦的唯一根目錄 (即「/」目錄)。 StorageVolumeInfo.getStorageVolumes() 方法提供掛接式儲存體磁碟區的詳細資訊 (請參閱 使用儲存空間 )。

備註: 在 Android 上無法讀取檔案系統的根目錄。會傳回參照具有原生路徑「/」之目錄的 File 物件,但是該物件的屬性沒有精確的值。例如, spaceAvailable 永遠是 0。

指向明確的目錄

您可以設定 File 物件的 nativePath 屬性,將 File 物件指向明確的目錄,如下列範例所示 (適用於 Windows):

var file:File = new File(); 
file.nativePath = "C:\\AIR Test";

重要事項: 以這種方式指向明確路徑,將使程式碼無法跨平台使用。例如,上一個範例只能在 Windows 上運作。您可使用 File 物件的靜態屬性,如 File.applicationStorageDirectory ,以找出可跨平台運作的目錄。 再使用 resolvePath() 方法 (請參閱下一節) 瀏覽至相對路徑。

瀏覽至相對路徑

您可以使用 resolvePath() 方法,取得相對於其它指定之路徑的路徑。例如,下列程式碼會將 File 物件設定為指向使用者之主目錄的「AIR Test」子目錄:

var file:File = File.userDirectory; 
file = file.resolvePath("AIR Test");

您也可以使用 File 物件的 url 屬性,將物件指向 URL 字串架構的目錄,如下所示:

var urlStr:String = "file:///C:/AIR Test/"; 
var file:File = new File() 
file.url = urlStr; 

如需詳細資訊,請參閱 修改 File 的路徑

讓使用者瀏覽以選取目錄

File 包含 browseForDirectory() 方法,這個方法可以產生系統對話方塊,讓使用者在其中選取目錄指定給該物件。 browseForDirectory() 是非同步方法。如果使用者選取目錄並按一下「開啟」按鈕,File 物件便會傳送 select 事件;而如果使用者按一下「取消」按鈕,則會傳送 cancel 事件。

例如,下列程式碼會讓使用者選取某個目錄,並且在選取之後立即輸出該目錄的路徑:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
備註: 在 Android 上,不支援 browseForDirectory() 方法。呼叫此方法不會發生作用;會立即傳送取消事件。要讓使用者選取目錄,請改用自訂且應用程式定義的對話方塊。

指向應用程式的叫用目錄

您可以檢查在叫用應用程式時傳送之 InvokeEvent 物件的 currentDirectory 屬性,取得應用程式的叫用目錄位置。如需詳細資訊,請參閱 擷取命令列引數

將 File 物件指向檔案

有多種方式可以設定 File 物件指向的目標檔案。

指向明確檔案路徑

重要事項: 指向明確路徑,將使程式碼無法跨平台使用。例如,C:/foo.txt 這個路徑僅適用於 Windows。您可使用 File 物件的靜態屬性,如 File.applicationStorageDirectory ,以找出可跨平台運作的目錄。 再使用 resolvePath() 方法 (請參閱 修改 File 的路徑 ) 瀏覽至相對路徑。

您可以使用 File 物件的 url 屬性,將物件指向 URL 字串架構的目錄或檔案,如下所示:

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File() 
file.url = urlStr; 

您也可以將 URL 傳遞給 File() 建構函數,如下所示:

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File(urlStr); 

url 屬性一定會傳回經過 URI 編碼的 URL (例如,以 "%20 取代空格):

file.url = "file:///c:/AIR Test"; 
trace(file.url); // file:///c:/AIR%20Test 

您也可以使用 File 物件的 nativePath 屬性來設定明確的路徑。例如,下列程式碼在 Windows 電腦中執行時,會將 File 物件設定為指向 C: 磁碟之 AIR Test 子目錄中的 test.txt 檔案:

var file:File = new File(); 
file.nativePath = "C:/AIR Test/test.txt"; 

您也可以將這個路徑傳遞給 File() 建構函數,如下所示:

var file:File = new File("C:/AIR Test/test.txt"); 

使用正斜線 (/) 字元做為 nativePath 屬性的路徑分隔符號。在 Windows 上,您亦可使用反斜線 (\) 字元,但這樣會導致應用程式無法跨平台使用。

如需詳細資訊,請參閱 修改 File 的路徑

列舉目錄中的檔案

您可以使用 File 物件的 getDirectoryListing() 方法,取得指向根層級目錄中檔案和子目錄的 File 物件陣列。如需詳細資訊,請參閱 列舉目錄

讓使用者瀏覽以選取檔案

File 類別包含下列方法,這些方法可以產生系統對話方塊,讓使用者在其中選取檔案指定給該物件:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

這些方法都是非同步方法。當使用者選取檔案 (對於 browseForSave(),則是目標路徑) 時, browseForOpen() browseForSave() 方法便會傳送 select 事件。使用 browseForOpen() browseForSave() 方法時,一旦選取項目之後,目標 File 物件就會立即指向選取的檔案。當使用者選取多個檔案時, browseForOpenMultiple () 方法便會傳送 selectMultiple 事件。 selectMultiple 事件的類型為 FileListEvent,這個事件具有 files 屬性,該屬性是 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); 
} 

當您呼叫瀏覽方法時,如果應用程式已經開啟其它瀏覽器對話方塊,執行階段就會擲回 Error 例外。

備註: 在 Android 上,只能使用 browseForOpen() browseForOpenMultiple() 方法來選取音效檔。雖然使用者可以輸入任意的檔案名稱,browseForSave() 對話方塊仍然只會顯示媒體檔。若要開啟和儲存非媒體檔案,您應該考慮使用自訂對話方塊以取代這些方法。

修改 File 的路徑

您也可以呼叫 resolvePath() 方法,或者修改現有 File 物件的 nativePath url 屬性,修改 File 物件的路徑,如下列範例所示 (適用於 Windows):

var file1:File = File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test 
var file2:File = File.documentsDirectory; 
file2 = file2.resolvePath(".."); 
trace(file2.nativePath); // C:\Documents and Settings\userName 
var file3:File = File.documentsDirectory; 
file3.nativePath += "/subdirectory"; 
trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory 
var file4:File = new File(); 
file4.url = "file:///c:/AIR Test/test.txt"; 
trace(file4.nativePath); // C:\AIR Test\test.txt 

使用 nativePath 屬性時,請使用正斜線 (/) 字元,做為路徑分隔字元。在 Windows 上,您亦可使用反斜線 (\) 字元,但不建議這麼做,因為這樣會導致程式碼無法跨平台運作。

支援的 AIR URL 配置

在 AIR 中定義 File 物件的 url 屬性時,您可以使用下列任何 URL 配置:

URL 配置

說明

file

用於指定相對於檔案系統根項目的路徑。例如:

file:///c:/AIR Test/test.txt

URL 標準會指定 file URL 必須採用 file://<host>/<path> 的形式。在特殊情況下, <host> 可以是空字串,這時就表示「正在解譯其 URL 的電腦」。因此,file URL 通常都有三條斜線 (///)。

app

用於指定相對於應用程式之安裝根目錄 (包含所安裝應用程式之 application.xml 檔案的目錄) 的路徑。例如,下列路徑會指向應用程式安裝目錄的 images 子目錄:

app:/images

app-storage

用於指定相對於應用程式儲存目錄的路徑。針對每一個安裝的應用程式,AIR 都會定義唯一的應用程式儲存目錄,可以用來儲存某個應用程式專屬的資料。例如,下列路徑會指向應用程式儲存目錄之 settings 子目錄中的 prefs.xml 檔案:

app-storage:/settings/prefs.xml

控制檔案備份和快取

某些作業系統 (大多數是 iOS 和 Mac OS X) 會提供使用者自動將應用程式檔案備份到遠端儲存空間的功能。此外,在 iOS 上,備份檔案與否以及可在何處儲存不同用途的檔案,均有其限制。

下列摘要說明如何符合 Apple 的檔案備份和儲存原則。如需進一步資訊,請參閱下一章節。

  • 若要指定檔案不需要備份且 (僅 iOS) 允許作業系統在裝置儲存空間不足時加以刪除,請將檔案儲存在快取目錄中 ( File.cacheDirectory )。這是 iOS 上慣用的儲存位置,應可用於大多數可以重新產生或重新下載的檔案。

  • 若要指定檔案不需要備份但不可由作業系統加以刪除,請將檔案儲存在其中一個應用程式元件庫目錄,例如應用程式儲存目錄 ( File.applicationStorageDirectory ) 或文件目錄 ( File.documentsDirectory )。請將 File 物件的 preventBackup 屬性設定為 true 。這是為了符合 Apple 對可以重新產生或再次下載的內容的要求,但也是為了讓您的應用程式在離線使用時正常運作的必要動作。

指定檔案進行備份

為了節省備份空間並減少網路頻寬使用,Apple 的 iOS 和 Mac 應用程式原則指定,應僅針對包含使用者所輸入資料或無法以其他方式重新產生或下載的資料的檔案進行備份。

根據預設,應用程式元件庫資料夾中的所有檔案都會備份。在 Mac OS X 上,這是應用程式儲存目錄。在 iOS 上,這包括應用程式儲存目錄、應用程式目錄、桌面目錄、文件目錄和使用者目錄 (因為那些目錄會對應至 iOS 上的應用程式元件庫資料夾)。因此,任何位於那些目錄的檔案都會根據預設備份到伺服器儲存空間。

如果您要將可由應用程式重新建立的檔案儲存在其中一個位置,應該為檔案設定旗標,好讓作業系統知道不要備份該檔案。若要指示檔案不可備份,請將 File 物件的 preventBackup 屬性設定為 true

請注意,在 iOS 上,對於位於任何應用程式元件庫資料夾中的檔案,即使檔案的 preventBackup 屬性設定為 true ,檔案還是會標記為作業系統不可刪除的永續性檔案。

控制檔案快取和刪除

Apple 的 iOS 應用程式原則指定,當裝置上的儲存空間不足時,作業系統應盡量刪除可重新產生的內容。

在 iOS 上,應用程式元件庫資料夾 (例如應用程式儲存目錄或文件目錄) 中的檔案會標記為永久檔案,並且不會遭到作業系統刪除。

對於可由應用程式重新產生並在儲存空間不足時加以刪除的檔案,請儲存在應用程式快取目錄中。您可以使用 File.cacheDirectory 靜態屬性來存取快取目錄。

在 iOS 上,快取目錄相當於應用程式的快取目錄 (<Application Home>/Library/Caches)。在其他作業系統上,這個目錄會對應至可相比的目錄。例如,在 Mac OS X 上,它也會對應至應用程式元件庫的 Caches 目錄。在 Android 上,快取目錄會對應至應用程式的快取目錄。在 Windows 上,快取目錄會對應至作業系統的 temp 目錄。在 Android 和 Windows 上,這是可透過呼叫 File 類別的 createTempDirectory() createTempFile() 方法加以存取的相同目錄。

尋找兩個檔案之間的相對路徑

您可以使用 getRelativePath() 方法,尋找兩個檔案之間的相對路徑:

var file1:File = File.documentsDirectory.resolvePath("AIR Test"); 
var file2:File = File.documentsDirectory 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
 
trace(file1.getRelativePath(file2)); // bob/test.txt 

getRelativePath() 方法的第二個參數 useDotDot 允許在結果中傳回 .. 語法,以指出上層目錄:

var file1:File = File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
var file2:File = File.documentsDirectory; 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
var file3:File = File.documentsDirectory; 
file3 = file3.resolvePath("AIR Test/susan/test.txt"); 
 
trace(file2.getRelativePath(file1, true)); // ../.. 
trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt 

取得檔名的標準化版本

檔案和路徑名稱在 Windows 和 Mac OS 中不會區分大小寫。在下列範例中,兩個 File 物件會指向相同的檔案:

File.documentsDirectory.resolvePath("test.txt"); 
File.documentsDirectory.resolvePath("TeSt.TxT");

不過,文件和目錄名稱則包含大小寫。例如,下列範例會假設在 documents 目錄中有名為 AIR Test 的資料夾:

var file:File = File.documentsDirectory.resolvePath("AIR test"); 
trace(file.nativePath); // ... AIR test 
file.canonicalize(); 
trace(file.nativePath); // ... AIR Test 

canonicalize() 方法會轉換 nativePath 物件,為檔案或目錄名稱使用正確的大小寫。在區分大小寫的檔案系統上 (例如 Linux),當同時存在多個僅名稱大小寫不同的檔案時, canonicalize() 方法就會調整路徑來對應所找到的第一個檔案 (尋找的順序由檔案系統決定)。

您也可以使用 canonicalize() 方法,將短檔名 (「8.3」名稱) 轉換為長檔名 (適用於 Windows),如下列範例所示:

var path:File = new File(); 
path.nativePath = "C:\\AIR~1"; 
path.canonicalize(); 
trace(path.nativePath); // C:\AIR Test

使用套件和符號連結

各種作業系統都支援套件檔案和符號連結檔案:

套件 —在 Mac OS 中,目錄可以指定為套件,並在 Mac OS Finder 中顯示為單一檔案,而非顯示為目錄。

符號連結 —Mac OS、Linux 和 Windows Vista 皆支援符號連結。符號連結可讓檔案指向磁碟上的另一個檔案或目錄。符號連結與別名相似,但卻不同。別名一定會回報為檔案 (而非目錄),而且讀取或寫入別名或捷徑絕不會影響它所指向的原始檔案或目錄。另一方面,符號連結的行為和它所指向的符號或目錄完全相同。它可以回報為檔案或目錄,而且讀取或寫入符號連結會影響它所指向的原始檔案或目錄,而非符號連結本身。此外,在 Windows 中,對於參考連接點 (在 NTFS 檔案系統中使用) 的 File 物件, isSymbolicLink 屬性是設定為 true

File 類別包含 isPackage isSymbolicLink 屬性,可用於檢查 File 物件參考的是套件還是符號連結。

下列程式碼會重複執行使用者的桌面目錄,並列出「不是」套件的子目錄:

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isDirectory && !desktopNodes[i].isPackage) 
    { 
        trace(desktopNodes[i].name); 
    } 
} 

下列程式碼會重複執行使用者的桌面目錄,並列出「不是」符號連結的檔案和目錄:

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (!desktopNodes[i].isSymbolicLink) 
    { 
        trace(desktopNodes[i].name); 
    } 
} 

canonicalize() 方法會變更符號連結的路徑,使其指向該連結所參考的檔案或目錄。下列程式碼會重複執行使用者的桌面目錄,並回報本身為符號連結之檔案所參考的路徑:

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isSymbolicLink) 
    { 
        var linkNode:File = desktopNodes[i] as File; 
        linkNode.canonicalize(); 
        trace(linkNode.nativePath); 
    } 
} 

判斷磁碟的可用空間

File 物件的 spaceAvailable 屬性表示在 File 位置的可用空間 (以位元組為單位)。例如,下列程式碼會檢查應用程式儲存目錄中的可用空間:

trace(File.applicationStorageDirectory.spaceAvailable); 

如果 File 物件參考目錄,則 spaceAvailable 屬性會指出目錄中檔案可使用的空間。如果 File 物件參考檔案,則 spaceAvailable 屬性會指出檔案可成長的空間。如果檔案位置不存在, spaceAvailable 屬性會設定為 0。如果 File 物件參考符號連結,則 spaceAvailable 屬性會設定為符號連結所指向位置的可用空間。

目錄或檔案的可用空間通常與包含目錄或檔案之磁碟中的可用空間相同。不過,可用空間可能會將帳戶配額和每個目錄限制納入考量。

將檔案或目錄加入至磁碟,通常需要比檔案實際大小或目錄內容大小更大的空間。例如,作業系統可能需要更多空間來儲存索引資訊。必要的磁區也可能會使用額外的空間。此外,可用空間會動態變更。因此,您無法預期為檔案儲存區配置「所有」空間。如需有關在檔案系統中寫入資料的詳細資訊,請參閱 讀取和寫入檔案

StorageVolumeInfo.getStorageVolumes() 方法提供掛接式儲存體磁碟區的詳細資訊 (請參閱 使用儲存空間 )。

使用預設系統應用程式開啟檔案

在 AIR 2 中,您可以使用作業系統註冊的應用程式來開啟檔案。例如,AIR 應用程式可以使用註冊的應用程式來開啟 DOC 檔案。使用 File 物件的 openWithDefaultApplication() 方法開啟檔案。例如,以下程式碼使用 DOC 檔案的預設應用程式來開啟使用者桌面上名稱為 test.doc 檔案:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
備註: 在 Linux 上,檔案的 MIME 類型 (非副檔名) 會決定檔案的預設應用程式。

以下程式碼可以讓使用者瀏覽 mp3 檔案,然後使用 mp3 檔案的預設播放應用程式來開啟它。

var file:File = File.documentsDirectory; 
var mp3Filter:FileFilter = new FileFilter("MP3 Files", "*.mp3"); 
file.browseForOpen("Open", [mp3Filter]); 
file.addEventListener(Event.SELECT, fileSelected); 
 
function fileSelected(e:Event):void 
{ 
    file.openWithDefaultApplication(); 
}

您不可以將 openWithDefaultApplication() 方法用於應用程式目錄中的檔案。

AIR 會禁止您使用 openWithDefaultApplication() 方法開啟特定的檔案。在 Windows 上,AIR 會禁止開啟特定檔案類型的檔案,例如 EXE 或 BAT。在 Mac OS 和 Linux 上,AIR 會讓您無法開啟以特定應用程式啟動的檔案 (這些包括 Mac OS 上的 Terminal 和 AppletLauncher,以及 Linux 上的 csh、bash 或 ruby)。嘗試使用 openWithDefaultApplication() 方法開啟這些檔案會產生例外。如需禁止的檔案類型詳細清單,請參閱 File.openWithDefaultApplication() 方法的語言參考項目。

備註: 此限制不適用於使用原生安裝程式 (延伸桌面應用程式) 安裝的 AIR 應用程式。