ディレクトリの列挙

Adobe AIR JavaScriptでディレクトリを列挙する方法です。

ディレクトリを列挙するには、Fileオブジェクトの
  • getDirectoryListing
  • getDirectoryListingAsync
メソッドを使用します。

Asyncが付いている方は非同期、そうでないほうは同期でディレクトリを列挙します。
列挙されるディレクトリにサブディレクトリは含まれません。

例えば、ドキュメントのディレクトリ(Windowsならマイドキュメント、Mac OS Xなら書類)内にあるファイルとディレクトリを列挙するには、以下のようなコードになります。
var files = air.File.documentsDirectory.getDirectoryListing();
※予め"AIRAliases.js"を読み込んでおく必要があります。

戻り値はFileオブジェクトの配列です。ファイル名の一覧を得るには、以下のようにします。
var files = air.File.documentsDirectory.getDirectoryListing();
var list = [];
for(i = 0; i < files.length; i++)
    list.push(files[i].name);

任意のディレクトリのファイルとディレクトリを列挙するには、"nativePath"メソッドを使用してFileオブジェクトを生成します。
var dir = new air.File();
dir.nativePath = "C:\\";

var files = dir.getDirectoryListing();
var list = [];
for(i = 0; i < files.length; i++)
    list.push(files[i].name);
ただし、この方法では、プラットフォームごとにパスの表現方法が違うため、複数のプラットフォームで動かすことができません。 したがって、"resolvePath"メソッドを用いて相対的に指定したほうがいいでしょう。
var dir = air.File.documentsDirectory.resolvePath("test");

var files = dir.getDirectoryListing();
var list = [];
for(i = 0; i < files.length; i++)
    list.push(files[i].name);
上記の例では、ドキュメントのディレクトリにあるtestというディレクトリのファイルを列挙します。
var dir = air.File.{ベースとなるディレクトリ}.resolvePath({相対パス});
のように記述することで、ベースとなるディレクトリからの相対パスでディレクトリを指定できます。ベースとなるディレクトリには、"applicationStorageDirectory"(Adobe AIRアプリケーションで使用するデータが保存されるディレクトリ)などを指定するといいでしょう。

非同期で一覧を取得する場合は、getDirectoryListingAsyncを使います。列挙対象となるディレクトリの取得などは上記の方法と同じです。
var list = [];
var dir = air.File.documentsDirectory; 
dir.getDirectoryListingAsync(); 
dir.addEventListener(air.FileListEvent.DIRECTORY_LISTING, function(e){
    var files = e.files; 
    for(i = 0; i < files.length; i++)  
       list.push(files[i].name);
});
"air.FileListEvent.DIRECTORY_LISTING"に対してイベントハンドラを設定することで、列挙完了時に設定したイベントハンドラが呼び出されます。

0 件のコメント :

コメントを投稿