Air File類使用方法

[size=medium]air file 系統中文件或目錄的指針
2010-06-01 11:29

File 對象是指向文件系統中文件或目錄的指針。

File 類擴展了 FileReference 類。在 Adobe® Flash® Player 和 AIR 中可用的 FileReference 類表示指向文件的指針,但 File 類添加了一些屬性和方法,出於安全方面的考慮,Flash Player 中(在瀏覽器中運行的 SWF 文件中)未公開這些屬性和方法。

關於 File 類

您可以使用 File 類執行以下操作:

*

獲取特殊目錄的路徑,包括用戶目錄、用戶的文檔目錄、應用程序的啓動目錄以及應用程序目錄
*

複製文件和目錄
*

移動文件和目錄
*

刪除文件和目錄(或將它們移到垃圾桶)
*

列出目錄中包含的文件和目錄
*

創建臨時文件和文件夾

當 File 對象指向文件路徑後,您可以通過 FileStream 類使用該 File 對象讀取和寫入文件數據。

File 對象可以指向尚不存在的文件或目錄的路徑。創建文件或目錄時可以使用這種 File 對象。
File 對象的路徑

每個 File 對象具有兩個屬性,各屬性可分別定義該對象的路徑:

屬性


說明

nativePath


指定文件在特定平臺上的路徑。例如,在 Windows 中,路徑可能是“c:\Sample directory\test.txt”,而在 Mac OS 中,路徑可能是“/Sample directory/test.txt”。nativePath 屬性在 Windows 中使用反斜槓 (\) 字符作爲目錄分隔符,在 Mac OS 中使用正斜槓 (/) 字符。

url


此屬性可以使用 file URL 方案指向文件。例如,在 Windows 中,路徑可能是“file:///c:/Sample%20directory/test.txt”,而在 Mac OS 中,路徑可能是“file:///Sample%20directory/test.txt”。除 file 之外,運行時還包括其他特殊 URL 方案,在支持的 URL 方案中將予以介紹

File 類包括用於指向 Mac 和 Windows 中的標準目錄的屬性。
將 File 對象指向目錄

可以採用多種不同方式設置 File 對象以使其指向某目錄。
指向用戶的主目錄

您可以將 File 對象指向用戶的主目錄。在 Windows 中,主目錄是“My Documents”目錄(例如,“C:\Documents and Settings\userName\My Documents”)的父級。在 Mac OS 中,它是 Users/userName 目錄。以下代碼將設置 File 對象以使其指向主目錄中的 AIR Test 子目錄:

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

指向用戶的文檔目錄

您可以將 File 對象指向用戶的文檔目錄。在 Windows 中,此目錄通常是“My Documents”目錄(例如,“C:\Documents and Settings\userName\My Documents”)。在 Mac OS 中,它是 Users/userName/Documents 目錄。以下代碼設置 File 對象以指向文檔目錄中的 AIR Test 子目錄:

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

指向桌面目錄

您可以使 File 對象指向桌面。以下代碼設置 File 對象以使其指向桌面的 AIR Test 子目錄:

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

指向應用程序存儲目錄

您可以使 File 對象指向應用程序存儲目錄。對於每個 AIR 應用程序,有一個唯一的關聯路徑用於定義應用程序存儲目錄。此目錄對每個應用程序和用戶是唯一的。您可能希望使用此目錄存儲特定於用戶、特定於應用程序的數據(如用戶數據或首選參數文件)。例如,以下代碼將使 File 對象指向應用程序存儲目錄中包含的首選參數文件 prefs.xml:

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

應用程序存儲目錄的位置由用戶名、應用程序 ID 和發佈者 ID 共同確定:

*

在 Mac OS 中,位於:

/Users/user name/Library/Preferences/applicationID.publisherID/Local Store/

例如:

/Users/babbage/Library/Preferences/com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1/Local Store

*

在 Windows 中,位於 Documents and Settings 目錄下的以下位置:

user name/Application Data/applicationID.publisherID/Local Store/

例如:

C:\Documents and Settings\babbage\Application Data\com.example.TestApp.02D88EEED35F84C264A183921344EEA353A629FD.1\Local Store

通過 File.applicationStorageDirectory 創建的 File 對象的 URL(和 url 屬性)將使用 app-storage URL 方案(請參閱支持的 URL 方案),如下所示:

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

指向應用程序目錄

您可以使 File 對象指向應用程序的安裝目錄,即應用程序目錄。您可以使用 File.applicationDirectory 屬性引用此目錄。您可以使用此目錄檢查應用程序描述符文件或與應用程序一起安裝的其他資源。例如,以下代碼將使 File 對象指向應用程序目錄中名爲 images 的目錄:

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

通過 File.applicationDirectory 創建的 File 對象的 URL(和 url 屬性)將使用 app URL 方案(請參閱支持的 URL 方案),如下所示:

var dir = air.File.applicationDirectory;
dir = dir.resolvePath("images");
air.trace(dir.url); // app:/images

指向文件系統根目錄

File.getRootDirectories() 方法列出所有根卷,如 Windows 計算機中的 C: 和已裝好的卷。在 Mac 中,此方法始終返回計算機的唯一根目錄(“/”目錄)。
指向明確的目錄

通過設置 File 對象的 nativePath 屬性,可以使 File 對象指向某個明確的目錄,如以下示例中所示(在 Windows 中):

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

導航到相對路徑

您可以使用 resolvePath() 方法獲取相對於其他給定路徑的路徑。例如,以下代碼將設置 File 對象以使其指向用戶主目錄中的“AIR Test”子目錄:

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

您還可以使用 File 對象的 url 屬性以使該對象指向基於 URL 字符串的目錄,如下所示:

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

有關詳細信息,請參閱修改文件路徑。
讓用戶瀏覽以選擇目錄

File 類包括 browseForDirectory() 方法,它表示系統對話框,在該對話框中用戶可以選擇要分配給對象的目錄。browseForDirectory() 方法爲異步方法。如果用戶選擇一個目錄並單擊“打開”按鈕,它將調度一個 select 事件;或者如果用戶單擊“取消”按鈕,它將調度一個 cancel 事件。

例如,以下代碼能使用戶選擇一個目錄,並在選擇後輸出目錄路徑:

var file = new air.File();
file.addEventListener(air.Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(event) {
alert(file.nativePath);
}

指向從中調用應用程序的目錄

通過檢查調用應用程序時所調度的 InvokeEvent 對象的 currentDirectory 屬性,可以獲取從中調用應用程序的目錄位置。有關詳細信息,請參閱捕獲命令行參數。
將 File 對象指向文件

可採用多種不同方式設置 File 對象所指向的文件。
指向明確的文件路徑

您可以使用 resolvePath() 方法獲取相對於其他給定路徑的路徑。例如,以下代碼設置 File 對象以使其指向應用程序存儲目錄中的 log.txt 文件:

var file:File = air.File.applicationStorageDirectory;
file = file.resolvePath("log.txt");

您可以使用 File 對象的 url 屬性以使該對象指向基於 URL 字符串的文件或目錄,如下所示:

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

您還可以將 URL 傳遞到 File() 構造函數,如下所示:

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

url 屬性始終返回 URL 的 URI 編碼版本(例如,空格替換爲 %20):

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

您還可以使用 File 對象的 nativePath 屬性設置明確的路徑。例如,在 Windows 計算機中運行以下代碼,可以設置 File 對象以使其指向 C: 驅動器的 AIR Test 子目錄中的 test.txt 文件:

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

您還可以將此路徑傳遞到 File() 構造函數,如下所示:

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

在 Windows 中,您可以使用正斜槓 (/) 或反斜槓 (\) 字符作爲 nativePath 屬性的路徑分隔符。在 Mac OS 中,請使用正斜槓 (/) 字符作爲 nativePath 屬性的路徑分隔符:

var file = new air.File(/Users/dijkstra/AIR Test/test.txt");

有關詳細信息,請參閱修改文件路徑。
枚舉目錄中的文件

您可以使用 File 對象的 getDirectoryListing() 方法獲取指向位於某目錄根級的文件和子目錄的 File 對象數組。有關詳細信息,請參閱枚舉目錄。
讓用戶瀏覽以選擇文件

File 類包括以下方法,它們表示系統對話框,在該對話框中用戶可以選擇要分配給對象的文件:

*

browseForOpen()
*

browseForSave()
*

browseForOpenMultiple()

這些方法均爲異步方法。當用戶選擇一個文件時(或者,對於 browseForSave() 選擇一個目標路徑時),browseForOpen() 和 browseForSave() 方法將調度 select 事件。對 browseForOpen() 和 browseForSave() 方法,在進行選擇後目標 File 對象將指向所選的文件。當用戶選擇多個文件時,browseForOpenMultiple() 方法調度一個 selectMultiple 事件。selectMultiple 事件的類型是 FileListEvent,它具有一個 files 屬性,該屬性是一個 File 對象數組(指向所選的文件)。

例如,以下代碼向用戶顯示“Open”對話框,在該對話框中用戶可以選擇文件:

var fileToOpen = air.File.documentsDirectory;
selectTextFile(fileToOpen);

function selectTextFile(root)
{
var txtFilter = new air.FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
root.browseForOpen("Open", new window.runtime.Array(txtFilter));
root.addEventListener(air.Event.SELECT, fileSelected);
}

function fileSelected(event)
{
trace(fileToOpen.nativePath);
}

當您調用瀏覽方法時,如果應用程序已打開了其他瀏覽器對話框,則運行時會引發一個錯誤異常。
修改文件路徑

通過調用 resolvePath() 方法或通過修改對象的 nativePath 或 url 屬性,您還可以修改現有 File 對象的路徑,如以下示例中所示(在 Windows 中):

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

當使用 nativePath 屬性時,在 Windows 中使用正斜槓 (/) 或反斜槓 (\) 字符作爲目錄分隔符;在 Mac OS 中使用正斜槓 (/) 字符。在 Windows 中,切記在字符串文本中鍵入反斜槓字符兩次。
支持的 URL 方案

定義 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

查找兩個文件之間的相對路徑

您可以使用 getRelativePath() 方法查找兩個文件之間的相對路徑:

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

alert(file1.getRelativePath(file2)); // bob/test.txt

getRelativePath() 方法的第二個參數 useDotDot 允許在結果中返回 .. 語法,以指示父目錄:

var file1 = air.File.documentsDirectory;
file1 = file1.resolvePath("AIR Test");
var file2 = air.File.documentsDirectory;
file2 = file2.resolvePath("AIR Test/bob/test.txt");
var file3 = air.File.documentsDirectory;
file3 = file3.resolvePath("AIR Test/susan/test.txt");

alert(file2.getRelativePath(file1, true)); // ../..
alert(file3.getRelativePath(file2, true)); // ../../bob/test.txt

獲取文件名的規範版本

文件名和路徑名通常不區分大小寫。在以下示例中,兩個 File 對象指向同一個文件:

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

不過,文檔和目錄名確實包括大小寫。例如,以下代碼假定在文檔目錄中有一個名爲 AIR Test 的文件夾,如以下示例中所示:

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

canonicalize 方法可轉換 nativePath 對象,以對文件名或目錄名使用正確的大小寫。

在 Windows 中,您還可以使用 canonicalize() 方法將短文件名(“8.3”名稱)轉換爲長文件名,如以下示例中所示:

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

使用包和符號鏈接

多種操作系統支持包文件和符號鏈接文件:

包在 Mac OS 中,目錄可以指定爲包並作爲單個文件而不是目錄顯示在 Mac OS Finder 中。

符號鏈接符號鏈接允許一個文件指向磁盤上的其他文件或目錄。儘管符號鏈接與別名類似,不過它們並不相同。別名始終報告爲文件(而不是目錄),讀取或寫入別名或快捷方式從不影響它指向的原始文件或目錄。另一方面,符號鏈接的行爲則完全與它指向的文件或目錄類似。它可以報告爲文件或目錄,讀取或寫入符號鏈接將會影響它指向的文件或目錄,而不影響符號鏈接本身。

File 類包括 isPackage 和 isSymbolicLink 屬性,用於檢查 File 對象是否引用包或符號鏈接。

以下代碼將遍歷用戶的桌面目錄,列出不是 包的子目錄:

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

以下代碼將遍歷戶的桌面目錄,列出不是 符號鏈接的文件和目錄:

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

canonicalize() 方法可更改符號鏈接的路徑,以指向該鏈接所引用的文件或目錄。以下代碼將遍歷用戶的桌面目錄,報告由是符號鏈接的文件引用的路徑:

var desktopNodes = air.File.desktopDirectory.getDirectoryListing();
for (i = 0; i < desktopNodes.length; i++)
{
if (desktopNodes[i].isSymbolicLink)
{
var linkNode = desktopNodes[i];
linkNode.canonicalize();
air.trace(desktopNodes[i].name);
}
}

確定捲上的可用空間

File 對象的 spaceAvailable 屬性是 File 位置的可用空間(以字節爲單位)。例如,以下代碼檢查應用程序存儲目錄中的可用空間:

air.trace(air.File.applicationStorageDirectory.spaceAvailable);

如果 File 對象引用一個目錄,則 spaceAvailable 屬性將指示可供文件使用的目錄空間。如果 File 對象引用一個文件,則 spaceAvailable 屬性將指示可供該文件使用的空間。如果 File 位置不存在,則 spaceAvailable 屬性將設置爲 0。如果 File 對象引用一個符號鏈接,則 spaceAvailable 屬性將設置爲符號鏈接指向的位置的可用空間。

通常,目錄或文件的可用空間與包含該目錄或文件的捲上的可用空間相同。不過,可用空間與磁盤配額及每個目錄的空間限制有關。

將文件或目錄添加到卷中通常需要比文件的實際大小或目錄中內容的實際大小更多的空間。例如,操作系統可能需要更多空間來存儲索引信息。或者,所需的磁盤扇區可能會使用額外的空間。此外,可用空間是動態變化的。因此,您不能期望爲文件存儲分配報告的全部空間。有關寫入文件系統的信息,請參閱讀取和寫入文件。
[/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章