
シニアテクニカルライター
Adobe
Text Editor サンプルアプリケーションは、Adobe AIR のファイルを操作するための次のような機能を示します。
注意:このサンプルアプリケーションは、説明のためにそのままの状態で提供されています。

図 1. プレーンテキストファイルの単純なエディタのサンプルアプリケーション
この記事に書かれた操作を行うには、次のソフトウェアとファイルが必要です。
このサンプルアプリケーションには、次のファイルが含まれています。
HTML ベースのアプリケーション構築の経験があることが推奨されます。このクイックスタートの開始方法について詳しくは、「Building the Quick Start sample applications with HTML」を参照してください。
アプリケーションのインストーラ(TextEditorHTML.air)をダウンロードして起動し、アプリケーションをインストールします。このアプリケーションは、プレーンテキストファイルの単純なエディタです。すべてのテキストファイルの読み書きに UTF-8 エンコーディングを使用します。
AIR クラスの使用方法について詳しくは、「Adobe AIR Language Reference for HTML Developers」を参照してください。
init() メソッドは、定義済みのパスを参照するように defaultDir File オブジェクトを設定します。
defaultDir = air.File.documentsDirectory;
このコードでは、ユーザのドキュメントディレクトリを参照するようにオブジェクトを設定しています。Windows では、これはマイドキュメントディレクトリになります。Mac OS では、/Users/userName/Documents ディレクトリです。
ユーザがファイルパスを指定していない場合、defaultDir ファイルは、後で FileChooser ウィンドウによって参照されます。
ユーザが「開く」ボタンをクリックすると、openFileDB() メソッドで File オブジェクトの browseForOpen() メソッドが呼び出され、新しいファイル参照ダイアログボックスが開きます。
var fileChooser;
if(currentFile)
{
fileChooser = currentFile;
}
else
{
fileChooser = defaultDir;
}
fileChooser.browseForOpen("Open");
ユーザがメインウィンドウで「Save As」ボタンをクリックすると、saveAs() メソッドで同様に File オブジェクトの browseForSave() メソッドが呼び出されます。
var fileChooser;
if(currentFile)
{
fileChooser = currentFile;
}
else
{
fileChooser = defaultDir;
}
fileChooser.browseForSave("Save");
ユーザが開くファイルを選択すると、fileChooser File オブジェクトから select イベントが送出されます。openFile() 関数は、このイベントのイベントリスナーとして登録されています。この関数で、stream という新しい FileStream オブジェクトが設定されます。
stream = new air.FileStream();
try
{
document.getElementById("mainText").value = "";
currentFile = event.target;
stream.open(currentFile, air.FileMode.READ);
var str = stream.readUTFBytes(stream.bytesAvailable);
stream.close();
document.getElementById("mainText").value = str;
document.title = "Text Editor - " + currentFile.name;
}
catch(error)
{
ioErrorHandler()
}
注意:ファイルを開いて読み取るコードは try/catch 構造で囲まれているので、I/O エラーが発生すると、ioErrorHandler() メソッドが呼び出されます。
ストリームオブジェクトの open() メソッドには、2 つのパラメータがあります。
READ 定数)で定義されたファイルモードです。 readUTFBytes() メソッドでは、ファイルから UTF-8 テキストデータが読み取られます。このメソッドのパラメータは stream.bytesAvailable に渡されるので、ファイル全体が読み取られます。読み取られたデータは、ページの mainText TEXTAREA 要素に渡されます。
この例では、open() メソッドを使用して、同期操作用にファイルを開いています。また、openAsync() メソッドを使用して、非同期操作用にファイルを開くこともできます。ただし、非同期操作用にファイルを開いた場合は、complete イベントおよび ioError イベントを処理するようイベントリスナーを設定する必要があります。
ユーザが「保存」ボタンをクリックすると、saveFile() メソッドが呼び出されます。このメソッドで、stream という新しい FileStream オブジェクトが設定され、データがファイルに書き込まれます。
try
{
stream = new air.FileStream();
stream.open(file, air.FileMode.WRITE);
var outData = document.getElementById("mainText").value;
outData = outData.replace(/\n/g, air.File.lineEnding);
stream.writeUTFBytes(outData);
document.title = "Text Editor - " + file.name;
}
catch(error)
{
ioErrorHandler()
}
ファイルを開いて読み取るコードは try/catch 構造で囲まれているので、I/O エラーが発生すると、ioErrorHandler() メソッドが呼び出されます。
ストリームオブジェクトの open() メソッドには、2 つのパラメータがあります。
WRITE 定数)で定義されたファイルモードです。 try ステートメントの後の 4 行目では、TEXTAREA データ内の \n 改行文字をプラットフォーム固有の行末文字に置き換えています。行末文字は、static File.lineEnding プロパティで表されています。
outData = outData.replace(/\n/g, air.File.lineEnding);
writeUTFBytes() メソッドでは、UTF-8 テキストデータがファイルに書き込まれます。
この例では、open() メソッドを使用して、同期操作用にファイルを開いています。また、openAsync() メソッドを使用して、非同期操作用にファイルを開くこともできます。ただし、非同期操作用にファイルを開いた場合は、outputProgress イベントおよび ioError イベントを処理するようイベントリスナーを設定する必要があります。
非同期操作を使用すると、他のプロセス(グラフィカルな進行状況など)でファイルを非同期に読み書きさせることができます。
Jeff Swartzは、1992年にMacromedia(現Adobe Systems)に入社し、現在はAdobe AIR担当のテクニカルライターを務めています。Jeffは、University of Illinois at Urbana-Champaignのコンピュータサイエンス学学士号と、Edinburgh University人工知能学部での就学経験を有しています。サンフランシスコベイエリアのファンは、Jeffのトロンボーン演奏を寛大に許容しています。また、Vienna Beef Ltd.のダンシングホットドッグ、Big Frankとして活躍した経験もあります。