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 オブジェクトには、そのオブジェクトのパスをそれぞれ定義する 2 つのプロパティがあります。

プロパティ

説明

nativePath

ファイルへのプラットフォーム固有のパスを指定します。例えば、Windows では「c:¥Sample directory¥test.txt」、Mac OS では「/Sample directory/test.txt」のようになります。nativePath プロパティでは、ディレクトリの区切り文字として、Windows では円記号(¥)、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 では、アプリケーションをアンインストールした場合、またはユーザーがアプリケーションデータを消去するよう選択した場合に、アプリケーション記憶領域ディレクトリが削除されますが、これは他のプラットフォームには当てはまりません。

  • File.applicationDirectory - アプリケーションがインストールされている(インストールされるアセットがある場合はそれらも含まれる)ディレクトリ。一部のオペレーティングシステムでは、物理ディレクトリではなく単一のパッケージファイルにアプリケーションが格納されます。この場合、ネイティブパスを使用してコンテンツにアクセスできない可能性があります。アプリケーションディレクトリは読み取り専用です。

  • File.desktopDirectory - ユーザーのデスクトップディレクトリ。デスクトップディレクトリがプラットフォームで定義されていない場合は、ファイルシステム上の別の場所が使用されます。

  • File.documentsDirectory - ユーザーのドキュメントディレクトリ。ドキュメントディレクトリがプラットフォームで定義されていない場合は、ファイルシステム上の別の場所が使用されます。

  • File.userDirectory - ユーザーディレクトリ。ユーザーディレクトリがプラットフォームで定義されていない場合は、ファイルシステム上の別の場所が使用されます。

注意: デスクトップディレクトリ、ドキュメントディレクトリ、またはユーザーディレクトリの標準の場所がプラットフォームで定義されていない場合、File.documentsDirectoryFile.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.documentsDirectory などの File クラスの静的プロパティを使用することをお勧めします。

一般的なディレクトリの場所

プラットフォーム

ディレクトリの種類

一般的なファイルシステムの場所

Android

アプリケーション

/data/data/

アプリケーション記憶領域

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

デスクトップ

/mnt/sdcard

ドキュメント

/mnt/sdcard

一時

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

ユーザー

/mnt/sdcard

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

デスクトップ

/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\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 アプリケーションでは、この表に示す applicationIDfilename の値はアプリケーション記述子から取得されます。アプリケーション記述子に発行者 ID を指定すると、その発行者 ID がこれらのパスのアプリケーション ID に追加されます。userName の値は、インストールを行うユーザーのアカウント名です。

テレビ用 AIR アプリケーションのディレクトリ表示

テレビ用 AIR デバイスでのシステムファイルに対するセキュリティを確保するために、AIR アプリケーションは限られたディレクトリ以外にはアクセスできません。テレビ用 AIR では、アプリケーションが他のディレクトリにアクセスすることは禁止されています。さらに、テレビ用 AIR では、AIR アプリケーションごとに各ユーザー固有のデータが独立して管理されています。

AIR アプリケーションは、ActionScript 3.0 による使用のみを目的としたディレクトリ名を使用します。これらの名前はデバイス上の実際のディレクトリとは異なります。テレビ用 AIR はこれらの ActionScript 3.0 ディレクトリ名を実際のデバイスのディレクトリにマップします。このマップ処理によって、関係のないローカルファイルへの不当なアクセスや不注意なアクセスを行わないようテレビ用 AIR アプリケーションを保護します。

ActionScript 3.0 ディレクトリ名は次のとおりです。

/app/
AIR アプリケーションを実行するための読み取り専用アプリケーションディレクトリ。

/app-storage/
AIR アプリケーションを実行するための、読み取り / 書き込み可能なアプリケーション記憶領域ディレクトリ。

/home/
読み取り / 書き込み可能なユーザーディレクトリ。

/tmp/
AIR アプリケーションを実行するための、読み取り / 書き込み可能な一時ディレクトリ。

/volumes/
マウントされたボリュームを表す 0 個以上の読み取り / 書き込み可能なサブディレクトリを含む読み取り専用ディレクトリ。

アクセスを禁止されたディレクトリにアプリケーションがアクセスしようとすると、ActionScript コードでキャッチされる例外がスローされます。

様々な File プロパティおよびメソッド用の File.nativePath の値を次の表に示します。これらの値は、デバイスのファイルシステムを表す、AIR アプリケーション専用の値を示しています。

File プロパティまたはメソッド

File.nativePath の値

マップ情報

applicationDirectory

/app/

アプリケーション固有のディレクトリにマップされます。

applicationStorageDirectory

/app-storage/

ユーザー固有のディレクトリ内のアプリケーション固有のディレクトリにマップされます。

desktopDirectory

/home/

ユーザー固有のディレクトリ内のアプリケーション固有のディレクトリにマップされます。userDirectory および documentsDirectory と同じディレクトリです。

userDirectory

/home/

ユーザー固有のディレクトリ内のアプリケーション固有のディレクトリにマップされます。desktopDirectory および documentsDirectory と同じディレクトリです。

documentsDirectory

/home/

ユーザー固有のディレクトリ内のアプリケーション固有のディレクトリにマップされます。userDirectory および desktopDirectory と同じディレクトリです。

createTempDirectory()

/tmp/

一時ディレクトリにマップされます。テレビ用 AIR は AIR アプリケーションの終了時にこのディレクトリと内容を削除します。

また、テレビ用 AIR デバイスでは、次のメソッドの動作について考慮してください。

  • File.createTempFile() は、/tmp/ ディレクトリ内にファイルを作成します。

  • File.getRootDirectories() は、1 つの File オブジェクトを含む配列を返します。この File オブジェクトの nativePath プロパティの値は「/」です。このルートディレクトリには、appapp-storagehometmp の各ディレクトリが含まれます。

  • StorageVolumeInfo.storageVolumeInfo.getStorageVolumes() は、StorageVolume オブジェクトの Vector を返します。各 StorageVolume オブジェクトの rootDirectory プロパティは File オブジェクトです。この File オブジェクトの nativePath の値は、/volumes/ から始まります。すべてのアプリケーションとユーザーには /volumes/ ディレクトリへのアクセス権があります。

File オブジェクトでのディレクトリの参照

File オブジェクトでディレクトリの参照を設定するには、様々な方法があります。

ユーザーのホームディレクトリの参照

File オブジェクトでユーザーのホームディレクトリを参照できます。次のコードでは、ホームディレクトリの AIR Test サブディレクトリを参照するように File オブジェクトを設定しています。

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

ユーザーのドキュメントディレクトリの参照

File オブジェクトでユーザーのドキュメントディレクトリを参照できます。次のコードでは、ドキュメントディレクトリの AIR Test サブディレクトリを参照するように File オブジェクトを設定しています。

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

デスクトップディレクトリの参照

File オブジェクトでデスクトップを参照できます。次のコードでは、デスクトップの AIR Test サブディレクトリを参照するように File オブジェクトを設定しています。

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

アプリケーション記憶領域ディレクトリの参照

File オブジェクトでアプリケーション記憶領域ディレクトリを参照できます。AIR アプリケーションにはそれぞれ、アプリケーション記憶領域ディレクトリを定義する一意のパスが関連付けられています。このディレクトリは、アプリケーションおよびユーザーごとに一意に割り当てられます。このディレクトリは、ユーザーおよびアプリケーションに固有のデータ(ユーザーデータや環境設定ファイルなど)を格納するために使用できます。例えば、次のコードでは、アプリケーション記憶領域ディレクトリに格納されている prefs.xml という環境設定ファイルを File オブジェクトで参照します。

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

通常、アプリケーション記憶領域ディレクトリの場所は、ユーザー名とアプリケーション ID に基づきます。次に示すファイルシステムの場所は、アプリケーションをデバッグする場合に使用できます。このディレクトリ内のファイルを解決するには、File.applicationStorage プロパティまたは app-storage: URI スキームを常に使用する必要があります。

  • Mac OS の場合

    /Users/ユーザー名/Library/Preferences/アプリケーション ID/Local Store/

    例えば、次のような場合です。

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • Windows の場合(Documents and Settings ディレクトリ内)

    C:\Documents and Settings\ユーザー名\Application Data\アプリケーション ID\Local Store\

    例えば、次のような場合です。

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Linux の場合

    /home/ユーザー名/.appdata/アプリケーション ID/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
  • テレビ用 AIR デバイスでのこの場所については、テレビ用 AIR アプリケーションのディレクトリ表示で説明しています。

注意: アプリケーションに発行者 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 プロパティを使用します。このディレクトリでは、アプリケーション記述ファイルなど、アプリケーションと共にインストールされたリソースを確認できます。例えば、次のコードでは、アプリケーションディレクトリにある images というディレクトリを File オブジェクトで参照します。

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.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.applicationStorageDirectory などの File オブジェクトの静的プロパティを使用します。次に、resolvePath() メソッド(次の節を参照)を使用して、相対パスに移動します。

相対パスのナビゲーション

resolvePath() メソッドを使用すると、別の特定のパスを基準とした相対的なパスを取得できます。例えば、次のコードでは、ユーザーのホームディレクトリの AIR Test サブディレクトリを参照するように File オブジェクトを設定しています。

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() メソッドは、非同期のメソッドです。このメソッドでは、ユーザーがディレクトリを選択して「開く」ボタンをクリックすると 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() メソッドはサポートされていません。このメソッドを呼び出しても効果はありません。すぐに cancel イベントが送出されます。ユーザーがディレクトリを選択できるようにするには、代わりにアプリケーションで定義されているカスタムダイアログを使用する必要があります。

アプリケーションを起動したディレクトリの参照

アプリケーションを起動したディレクトリの場所を取得するには、アプリケーションの起動時に送出された InvokeEvent オブジェクトの currentDirectory プロパティを確認します。詳しくは、コマンドライン引数のキャプチャを参照してください。

File オブジェクトでのファイルの参照

File オブジェクトで参照するファイルを設定するには、様々な方法があります。

明示的なファイルパスの参照

重要: 明示的なパスを参照すると、コードが複数のプラットフォームにわたって機能しなくなる可能性があります。例えば、C:¥foo.txt というパスは、Windows 上でのみ機能します。クロスプラットフォームで機能するディレクトリを見つけるには、File.applicationStorageDirectory などの File オブジェクトの静的プロパティを使用します。次に、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 コンピューターで実行すると、C: ドライブの AIR Test サブディレクトリにある test.txt ファイルを参照するように File オブジェクトが設定されます。

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()

これらのメソッドでは、いずれも非同期で処理が行われます。browseForOpen() メソッドと browseForSave() メソッドでは、ユーザーがファイル(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 例外がスローされます。

File パスの変更

resolvePath() メソッドを呼び出すか、オブジェクトの 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

file URL を指定する標準的な URL の形式は、file://<host>/<path> です。例外として、<host> のストリングは空にすることができます。その場合、「URL の解釈を行っているマシン」を示すものと解釈されます。そのため、file URL では、スラッシュが 3 つ連なる(///)ことがよくあります。

app

インストールされたアプリケーションのルートディレクトリ(インストールされたアプリケーションの application.xml ファイルが格納されたディレクトリ)を基準とした相対的なパスを指定する場合に使用します。例えば、次のパスは、インストールされているアプリケーションのディレクトリの images サブディレクトリを参照しています。

app:/images

app-storage

アプリケーション記憶領域ディレクトリを基準とした相対的なパスを指定する場合に使用します。AIR では、インストールされたアプリケーションごとに、一意のアプリケーション記憶領域ディレクトリが定義されます。このディレクトリは、そのアプリケーション固有のデータを格納するための便利な場所として使用できます。例えば、次のパスは、アプリケーション記憶領域ディレクトリの settings サブディレクトリにある prefs.xml ファイルを参照しています。

app-storage:/settings/prefs.xml

2 つのファイル間の相対パスの取得

getRelativePath() メソッドを使用すると、2 つのファイル間の相対パスを取得できます。

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() メソッドの 2 番目のパラメーターである 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 では、ファイル名およびパス名で大文字と小文字が区別されません。次のような場合、2 つの File オブジェクトで同じファイルが参照されます。

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

ただし、実際のドキュメント名やディレクトリ名には大文字も使用されます。例えば、次の例では、ドキュメントディレクトリに 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() メソッドは、次のように、Windows で短いファイル名(「8.3」形式の名前)を長いファイル名に変換する場合にも使用できます。

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 クラスには、File オブジェクトがパッケージまたはシンボリックリンクを参照しているかどうかを確認するための isPackage プロパティおよび isSymbolicLink プロパティが用意されています。

次のコードでは、ユーザーのデスクトップディレクトリを繰り返し処理して、パッケージではないサブディレクトリの一覧を出力します。

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 プロパティは、ファイルの場所として使用できる領域をバイト単位で示します。例えば、次のコードでは、アプリケーション記憶領域ディレクトリで利用可能な領域を確認します。

trace(File.applicationStorageDirectory.spaceAvailable); 

File オブジェクトがディレクトリを参照している場合、spaceAvailable プロパティはファイルが使用できるディレクトリ内の領域を示します。File オブジェクトがファイルを参照している場合、spaceAvailable プロパティはファイルが増大可能な領域を示します。ファイルの場所が存在しない場合、spaceAvailable プロパティは 0 に設定されます。File オブジェクトがシンボリックリンクを参照している場合、spaceAvailable プロパティは、シンボリックリンクが指している場所で利用可能な領域に設定されます。

通常、ディレクトリやファイルに利用可能な領域は、ディレクトリまたはファイルを格納するボリュームで利用可能な領域と同じです。ただし、利用可能な領域では、クォータやディレクトリごとの制限が考慮される場合があります。

ファイルやディレクトリをボリュームに追加するには、一般的に、実際のファイルのサイズやディレクトリのコンテンツのサイズよりも大きな領域が必要です。例えば、オペレーティングシステムの場合、インデックス情報を格納するためにより多くの領域が必要になる可能性があります。また、必要なディスクセクタのために、追加の領域が使用される場合があります。さらに、利用可能な領域は動的に変化します。したがって、報告されたすべての領域をファイル記憶域として割り当てることはできません。ファイルシステムへの書き込みについては、ファイルの読み取りと書き込みを参照してください。

StorageVolumeInfo.getStorageVolumes() メソッドは、マウントされたストレージボリュームに関する詳細を提供します(ストレージボリュームの操作を参照)。

デフォルトのシステムアプリケーションでファイルを開く

AIR 2 では、オペレーティングシステムによって登録されているアプリケーションを使用してファイルを開くことができます。例えば、AIR アプリケーションで DOC ファイルを開く場合は、DOC ファイルを開くように登録されているアプリケーションを使用します。File オブジェクトの openWithDefaultApplication() メソッドを使用すると、ファイルを開くことができます。例えば、次のコードでは、test.doc というファイルがユーザーのデスクトップに、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 では、EXE や BAT など、一定の種類のファイルを開くことができません。Mac OS および Linux では、特定のアプリケーションを起動するファイルは開けません(Mac OS の Terminal と AppletLauncher、および Linux の csh、bash または ruby が含まれます)。openWithDefaultApplication() メソッドを使用して、これらのファイルを開こうとすると、例外が発生します。開くことができないファイルの種類について詳しくは、File.openWithDefaultApplication() メソッドのリファレンスガイドを参照してください。

注意: ネイティブインストーラー(拡張デスクトップアプリケーション)を使用してインストールした AIR アプリケーションに関しては、この制限はありません。詳しくは、「ネイティブインストーラーでの AIR アプリケーションのパッケージ化」を参照してください。