ディレクトリの操作

Adobe AIR 1.0 およびそれ以降

ランタイムには、ローカルファイルシステム上のディレクトリを操作する機能が用意されています。

ディレクトリを参照する File オブジェクトの作成について詳しくは、 File オブジェクトでのディレクトリの参照 を参照してください。

ディレクトリの作成

File.createDirectory() メソッドを使用して、ディレクトリを作成することができます。例えば、次のコードでは、ユーザーのホームディレクトリのサブディレクトリとして AIR Test というディレクトリを作成します。

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

既にそのディレクトリが存在する場合、 createDirectory() メソッドでは何も行われません。

また、一部のモードでは、FileStream オブジェクトでファイルを開くときにもディレクトリが作成されます。FileStream インスタンスの作成時に FileStream() コンストラクターの fileMode パラメーターを FileMode.APPEND または FileMode.WRITE に設定すると、存在しない場合にディレクトリが作成されます。詳しくは、 ファイルの読み取りと書き込みのワークフロー を参照してください。

一時ディレクトリの作成

File クラスの createTempDirectory() メソッドを使用すると、次のように、システムの一時ディレクトリフォルダーにディレクトリを作成できます。

var temp:File = File.createTempDirectory(); 

createTempDirectory() メソッドでは、一意の一時ディレクトリが自動的に作成されます(そのため、新しい一意の場所を指定する手間が省けます)。

一時ディレクトリは、アプリケーションのセッションに使用される一時ファイルを一時的に格納するために使用できます。システムの一時ディレクトリに新しい一意の一時ファイルを作成するための createTempFile() メソッドも用意されています。

一時ディレクトリはすべてのデバイスで自動的に削除されるわけではないので、アプリケーションを終了する前に削除する必要がないか確認してください。

ディレクトリの列挙

File オブジェクトの getDirectoryListing() メソッドまたは getDirectoryListingAsync() メソッドを使用すると、ディレクトリ内のファイルおよびサブフォルダーを参照する File オブジェクトの配列を取得することができます。

例えば、次のコードでは、ユーザーのドキュメントディレクトリの内容の一覧を出力します(サブディレクトリの内容は確認されません)。

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

このメソッドの非同期バージョンを使用した場合は、 directoryListing イベントオブジェクトの files プロパティに、ディレクトリに関連する File オブジェクトの配列が格納されます。

var directory:File = File.documentsDirectory; 
directory.getDirectoryListingAsync(); 
directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler); 
 
function dirListHandler(event:FileListEvent):void 
{ 
    var contents:Array = event.files; 
    for (var i:uint = 0; i < contents.length; i++)  
    { 
        trace(contents[i].name, contents[i].size);  
    } 
} 

ディレクトリのコピーおよび移動

ファイルをコピーまたは移動する場合と同じメソッドを使用して、ディレクトリをコピーまたは移動することができます。例えば、次のコードでは、同期的にディレクトリがコピーされます。

var sourceDir:File = File.documentsDirectory.resolvePath("AIR Test"); 
var resultDir:File = File.documentsDirectory.resolvePath("AIR Test Copy"); 
sourceDir.copyTo(resultDir); 

copyTo() メソッドの overwrite パラメーターに true を指定すると、既存のターゲットディレクトリにあるすべてのファイルおよびフォルダーが削除され、ソースディレクトリ内のファイルおよびフォルダーに置き換えられます(ターゲットファイルがソースディレクトリに存在しない場合でも同様に処理されます)。

copyTo() メソッドの newLocation パラメーターとして指定するディレクトリは、結果として生成されるディレクトリへのパスを指定するものであり、そのディレクトリを格納する親ディレクトリを指定するものではありません。

詳しくは、 ファイルのコピーおよび移動 を参照してください。

ディレクトリの内容の削除

File クラスの deleteDirectory() メソッドおよび deleteDirectoryAsync() メソッドを使用すると、ディレクトリを削除することができます。1 つ目のメソッドでは同期的に処理が行われ、2 つ目のメソッドでは非同期で処理が行われます( AIR ファイルの基礎 を参照)。どちらのメソッドにも deleteDirectoryContents パラメーター(Boolean 型)があり、メソッドの呼び出しでこのパラメーターが true に設定されている場合は空ではないディレクトリが削除され、 false (デフォルト値)の場合は空のディレクトリだけが削除されます。

例えば、次のコードでは、ユーザーのドキュメントディレクトリの AIR Test サブディレクトリが同期的に削除されます。

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); 
directory.deleteDirectory(true); 

次のコードでは、ユーザーのドキュメントディレクトリの AIR Test サブディレクトリが非同期で削除されます。

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); 
directory.addEventListener(Event.COMPLETE, completeHandler) 
directory.deleteDirectoryAsync(true); 
 
function completeHandler(event:Event):void { 
    trace("Deleted.") 
} 

また、 moveToTrash() メソッドおよび moveToTrashAsync() メソッドを使用すると、ディレクトリをシステムのごみ箱に移動することもできます。詳しくは、 ごみ箱へのファイルの移動 を参照してください。