トップ » 技術記事 » API で覚える Adobe AIR(1) - ファイル関連APIを使ってみよう

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>
http://aoikujira.com/demo/hakkaku/rc/20080427_document-dir.png

実行結果は、ご利用の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>
http://aoikujira.com/demo/hakkaku/rc/20080427_air-doc.png

他にも、次のような特殊なディレクトリ表現を記述することができます。

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 オブジェクトさえ、理解してしまえば、いろいろな機能を利用することができるでしょう。

Series Navigation

このサイトについて

八角研究所
株式会社八角研究所のWEBサイトですよー。 いろんなものを創り出すことのできる環境をコツコツ構築中。 いったい、いつになったらできるのか。 この技術情報サイトもそのための活動の一環のつもり。

執筆者紹介

クジラ飛行机

クジラ飛行机

くじらはんど(http://kujirahand/)にて、日本語プログラミング言語「なでしこ」(IPA未踏ユース採択)、テキスト音楽「サクラ」(OSPオンラインソフト大賞入賞)など多くのオンラインソフトを開発。著書に「Flexプロフェッショナルガイド」「なでしこ公式バイブル」、「一週間でマスターするActionScript3.0」など。

TrackBack URL :