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 および iOS では、アプリケーションをアンインストールした場合、またはユーザーがアプリケーションデータを消去するよう選択した場合に、アプリケーション記憶領域ディレクトリが削除されますが、これは他のプラットフォームには当てはまりません。

  • 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

キャッシュ

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

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 の場合(AIR バージョンごとに異なる):

    AIR 3.2 以前/Users/user name/Library/Preferences/applicationID/Local Store/

    AIR 3.3 以降path/Library/Application Support/applicationID/Local Storepath/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/user name/.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 プロパティを使用します。このディレクトリでは、アプリケーション記述ファイルなど、アプリケーションと共にインストールされたリソースを確認できます。例えば、次のコードでは、アプリケーションディレクトリにある 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.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.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() メソッドは、非同期のメソッドです。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() メソッドはサポートされていません。このメソッドを呼び出しても効果はありません。すぐに 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 例外がスローされます。

注意: Android で browseForOpen() メソッドと browseForOpenMultiple() メソッドを使用して選択できるのは、イメージファイル、ビデオファイル、およびオーディオファイルのみです。また、ユーザーが任意のファイル名を入力できる場合でも、browseForSave() ダイアログにはメディアファイルのみ表示されます。メディアファイル以外のファイルを開いたり保存したりするには、これらのメソッドの代わりにカスタムダイアログの使用を検討する必要があります。

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

ファイルのバックアップとキャッシュの制御

iOS や Mac OS X を始めとする特定のオペレーティングシステムでは、アプリケーションファイルをリモート記憶領域に自動的にバックアップできます。さらに、iOS では、ファイルがバックアップ可能かどうかや、目的の異なるファイルの保存場所に関して制限があります。

ファイルのバックアップや記憶領域に関する Apple のガイドラインに準拠する方法について、次にまとめます。詳しくは、これ以降のセクションを参照してください。

  • 特定のファイルに関して、バックアップが不要で、(iOS のみ)デバイスの記憶領域が少ない場合にオペレーティングシステムによって削除できるように指定するには、そのファイルをキャッシュディレクトリ(File.cacheDirectory)に保存します。これは iOS 上の推奨される保存場所です。再生成や再ダウンロードが可能なほとんどのファイルに使用してください。

  • 特定のファイルに関して、バックアップが不要なものの、オペレーティングシステムによって削除されないように指定するには、そのファイルを、アプリケーション記憶領域ディレクトリ(File.applicationStorageDirectory)やドキュメントディレクトリ(File.documentsDirectory)などのアプリケーションライブラリディレクトリに保存します。File オブジェクトの preventBackup プロパティを true に設定します。これは、再生成や再ダウンロードが可能なものの、オフライン使用時にアプリケーションが適切に機能するために必要なコンテンツに関して、Apple が必須としている設定です。

バックアップ用ファイルの指定

バックアップ容量を節約し、ネットワーク帯域幅の使用率を抑えるために、iOS および Mac のアプリケーションに関する Apple のガイドラインでは、ユーザーが入力したデータやその他の理由で再生成や再ダウンロードができないデータを含むファイルのみをバックアップ対象として指定するよう定められています。

デフォルトでは、アプリケーションライブラリフォルダー内のすべてのファイルがバックアップされます。Mac OS X では、これはアプリケーション記憶領域ディレクトリです。iOS では、これにはアプリケーション記憶領域ディレクトリ、アプリケーションディレクトリ、デスクトップディレクトリ、ドキュメントディレクトリ、ユーザーディレクトリが含まれます(これらのディレクトリは iOS 上のアプリケーションライブラリフォルダーにマップされているため)。その結果、これらのディレクトリ内のファイルはすべて、デフォルトでサーバー記憶領域にバックアップされます。

使用しているアプリケーションで再作成可能なファイルをこれらの場所に保存する場合は、オペレーティングシステムにバックアップしないよう知らせるために、該当するファイルにフラグを付ける必要があります。特定のファイルをバックアップしないよう指定するには、File オブジェクトの preventBackup プロパティを true に設定します。

iOS では、いずれかのアプリケーションライブラリフォルダーに含まれるファイルに関して、preventBackup プロパティが true に設定されている場合でも、そのファイルには、オペレーティングシステムによって削除されない永続ファイルとしてフラグが付けられます。

ファイルのキャッシュと削除の制御

iOS アプリケーションに関する Apple のガイドラインでは、可能な限り、デバイスの記憶領域の容量が少なくなった場合に、再生成が可能なコンテンツをオペレーティングシステムが削除できるようにするよう定められています。

iOS では、アプリケーションライブラリフォルダー(アプリケーション記憶領域ディレクトリやドキュメントディレクトリなど)内のファイルは、永続ファイルとしてフラグが付けられ、オペレーティングシステムによって削除されることはありません。

アプリケーションで再生成でき、記憶領域の容量が少ない場合に削除しても安全なファイルは、アプリケーションキャッシュディレクトリに保存してください。キャッシュディレクトリには、File.cacheDirectory 静的プロパティを使用してアクセスします。

iOS では、キャッシュディレクトリはアプリケーションのキャッシュディレクトリ(<Application Home>/Library/Caches)に対応します。その他のオペレーティングシステムでは、このディレクトリは同等のディレクトリにマップされます。例えば、Mac OS X では、アプリケーションライブラリ内の Caches ディレクトリにもマップします。Android では、キャッシュディレクトリはアプリケーションのキャッシュディレクトリにマップします。Windows では、キャッシュディレクトリはオペレーティングシステムの TEMP ディレクトリにマップします。Android でも Windows でも、これは、File クラスの createTempDirectory() メソッドおよび createTempFile() メソッドに対する呼び出しによってアクセスする同じディレクトリです。

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 アプリケーション(拡張デスクトップアプリケーション)の場合、この制限はありません。