API で覚える Adobe AIR(1) - ファイル関連APIを使ってみよう
Adobe AIR が話題になっています。Adobe AIR を使えば、これまで使ってきた Web アプリケーションの技術、HTML/JavaScript や Flash/Flex を利用して、デスクトップアプリケーションを作ることができます。今回から、数回にわたって、Adobe AIR の API をテーマにして、AIR の各機能を紹介していきます。2回目の今回は、ローカルファイルの扱いについてみていきます。
ローカルファイルを操作できる AIR
Adobe AIRでは、ローカルファイルにアクセスする機能が提供されています。ローカルファイルを操作するために、いくつかのファイルシステムAPIが用意されています。これを利用して、以下の操作を行うことができます。
- ファイルやディレクトリの作成、削除、コピー、移動、リストアップ
- ファイルやディレクトリ情報の取得
- テキスト/バイナリファイルの読み書き
- オブジェクトのシリアライズ、デシリアライズ
- デスクトップやマイドキュメントなど、特殊パスの取得
特殊フォルダのパスを取得する方法
Adobe AIR では、デスクトップやマイドキュメントなど、各OSに用意されている、特殊なパスを取得する機能が用意されています。
例えば、以下のプログラムは、JavaScript でマイドキュメントのパスを表示するプログラムです。AIR API を利用するので、プロジェクトのディレクトリに、AIRAliases.js をコピーしてから実行してください。(AIRAliases.js については、連載の1回目をご覧ください。)
<script src="AIRAliases.js"/> <script> var path = air.File.documentsDirectory.nativePath; alert(path); </script>
実行結果は、ご利用のOSやユーザー名によって変わります。この実行画面は、Windows Vista で kujirax60 というユーザーで実行した場合の結果です。
air.documentsDirectory で、マイドキュメントのオブジェクトを取得することができるのです。air.File オブジェクトには、他にも次の特殊パスを利用することができます。
| プロパティ | 意味 |
| File.applicationStorageDirectory | データ保存用ディレクトリ |
| File.applicationDirectory | インストールが行われたディレクトリ |
| File.desktopDirectory | デスクトップのディレクトリ |
| File.documentsDirectory | マイドキュメントディレクトリ |
| File.userDirectory | ユーザーごとのホームディレクトリ |
パスの表し方
Fileオブジェクトには、パスの表現方法として、url プロパティと、nativePath プロパティの2つがあります。url は、パスをOSに依存しない仕方で表すことができます。そして、 nativePath は、OS固有の方法でパスを表します。
ここでは、マイドキュメントのフォルダを、nativePath と url で表示してみます。
<script src="AIRAliases.js"/> <script> // マイドキュメントのディレクトリ var dir1 = air.File.documentsDirectory.nativePath; var dir2 = air.File.documentsDirectory.url; alert(dir1 + "\n" + dir2); </script>
他にも、次のような特殊なディレクトリ表現を記述することができます。
| URL表現 | 意味 |
| app-storage:/ | 保存用のディレクトリを指す |
| app:/ | アプリケーションの実行ディレクトリを指す |
| file:/// | ローカルなファイルパスを表す |
これらの表現方法により、アプリケーションと一緒に配布したファイルを読み込んだり、保存用ディレクトリにデータを保存したり、というパスの指定を簡潔に行うことができるようになっています。
以下は、File オブジェクトを直接 url で表現する例です。
<script src="AIRAliases.js"/>
<script>
var path = new air.File("app-storage:/test.txt");
air.trace(path.url); // 結果 → app-storage:/test.txt
</script>
ファイルを指定する
また、Fileオブジェクトの resolvePath() メソッドを使うことにより、相対パスを指定することができます。以下は、JavaScript でデスクトップに「test.txt」というファイルを作成する例です。
file:SaveToDesktop.html
<script src="AIRAliases.js"/>
<script>
// デスクトップの test.txt というパスを指定する
var test_txt = air.File.desktopDirectory.resolvePath("test.txt");
// ファイルを保存する
var fs = new air.FileStream();
fs.open(test_txt, air.FileMode.WRITE);
fs.writeUTFBytes("abcd");
fs.close();
</script>
ファイルをコピーする方法
ファイルやディレクトリをコピーするには、copyTo()メソッドを使い、移動するには、moveTo() メソッドを使います。それぞれ、引数には、Fileオブジェクトを指定します。
以下は、デスクトップにある「Dir1」というディレクトリを「Dir2」へコピーする例です。ディレクトリのコピーでは、サブディレクトリにあるファイルまで丸々コピーしてくれます。(以下はJavaScriptの場合です。)
<script src="AIRAliases.js"/>
<script>
// ディレクトリを示す File オブジェクトを作成
var dir1 = air.File.desktopDirectory.resolvePath("Dir1");
var dir2 = air.File.desktopDirectory.resolvePath("Dir2");
// ディレクトリのコピー
dir1.copyTo(dir2);
</script>
同様の方法で、Fileオブジェクトの以下のメソッドが使えます。
| 動作 | メソッド |
| 移動 | file.moveTo() |
| コピー | file.copyTo() |
| ディレクトリ削除 | file.deleteDirectory() |
| ファイル削除 | file.deleteFile() |
| ごみ箱に移動 | file.moveToTrash() |
| ファイルが存在するか確認 | file.exists |
| ファイル一覧の取得 | file.getDirectoryListing() |
ローカルファイルの読み書きをしよう
次は、ファイルの読み込み・書き込みです。ファイルの内容を読み書きするには、FileStream クラスを利用します。はじめに、ファイルの読み書きの手順を箇条書きで確認しておきましょう。
- (1)ファイルを特定するために、File オブジェクトを作る
- (2)ファイルを読み書きするために、FileStream オブジェクトを作る
- (3)ファイルの読み込み/書き込みのモードを指定して開く
- (4)ファイルの読み書きを行う
- (5)ファイルを閉じる
以下は、アプリケーションごとのデータ保存ディレクトリ(app-storage:/)に、「test.txt」というファイルをつくり、ここに「テスト書き込み」という文字列を書き込み、その後、読み込んで表示するというプログラムを作ってみます。
file:SaveAndLoadText.html
<script src="AIRAliases.js"/>
<script>
//----------------------------------------------------------
alert("書き込みを行います");
// パスを表す File オブジェクトを作成
var path = new air.File("app-storage:/test.txt");
var write_fs = new air.FileStream();
write_fs.open(path, air.FileMode.WRITE);
write_fs.writeUTFBytes("テスト書き込み");
write_fs.close();
//----------------------------------------------------------
alert("読み込みます。");
var read_fs = new air.FileStream();
read_fs.open(path, air.FileMode.READ);
var str = read_fs.readUTFBytes(path.size);
read_fs.close();
alert("内容は→→" + str);
</script>
ファイルのオープンについて
ファイルの読み書きを行う前に、FileStream では、必ずファイルをオープンすることになっています。このとき、open() メソッドは次のように使います。
var fs:FileStream = new FileStream(); fs.open( ファイルオブジェクト, オープンモード );
このオープンモードの方ですが、書き込みを行う時と、読み込みを行う時で、指定するモードを変える必要があります。以下のモードが用意されています。
| ファイルモード | 説明 |
| FileMode.READ | ファイルの読み込みに使います。 |
| FileMode.WRITE | ファイルの書き込みに使います。ファイルが存在しないときはファイルを作成します。もし、すでにファイルがある時は、ファイルの内容を削除します。 |
| FileMode.APPEND | ファイルにデータを追記する時に使います。 |
| FileMode.UPDATE | ファイルを読み書き両用モードで開くときに使います。ファイルを開いてランダムアクセスする場合などに利用します。 |
実際の読み書きのメソッド
ファイルの読み書きに使うのが、FileStream クラスのメソッド writeUTFBytes() と readUTFBytes() です。これらを使うと、文字コードが UTF-8 のテキストの読み書きを行うことができます。
簡単にメモ帳を作ってみる
ここでは、簡単なメモ帳を作ってみます。このメモ帳は、アプリケーションを終了するときにファイルを保存し、起動した時にファイルを読み込むというものです。ファイルに名前をつけて保存することはできませんが、保存ボタンを押さなくても、ウィンドウを閉じるときに、自動的にファイルを保存するというものです。
<html>
<head><title>Memo</title>
<script src="AIRAliases.js"></script>
<script>
function $(name) { return document.getElementById(name); }
var a_txt;
var save_file = new air.File("app-storage:/memo.txt");
// ドキュメントを読み込んだ時
function doLoad() {
a_txt = $("a_txt");
if (save_file.exists) {
var fs = new air.FileStream();
fs.open(save_file, air.FileMode.READ);
var s = fs.readUTFBytes(save_file.size);
a_txt.value = s;
fs.close();
}
window.nativeWindow.addEventListener("closing", doUnload);
}
// ドキュメントを閉じる時
function doUnload() {
var fs = new air.FileStream();
fs.open(save_file, air.FileMode.WRITE);
fs.writeUTFBytes(a_txt.value);
fs.close();
}
</script>
</head>
<body onload="doLoad()">
<textarea id="a_txt" style="width:100%; height:100%"></textarea>
</body>
</html>
ファイル関連APIのまとめ
以上、ファイル関連のAPIについて紹介しました。Adobe AIR では、Mac OS XやWindowsなどOSに依存しない形でパスを表すことができます。そのために、File オブジェクトを介して、ファイルのコピーや、ファイルの読み書きを行うようになっています。そのため、File オブジェクトさえ、理解してしまえば、いろいろな機能を利用することができるでしょう。
このサイトについて
TrackBack URL :


