以下の例では、XML データが格納されているテキストファイルの読み取りおよび書き込みを行う方法を示します。
ファイルからの読み取りを行うには、File オブジェクトと FileStream オブジェクトを初期化し、FileStream の
readUTFBytes()
メソッドを呼び出して、ストリングを XML オブジェクトに変換します。
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var prefsXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
fileStream.close();
同様に、ファイルへのデータの書き込みも、適切な File オブジェクトと FileStream オブジェクトを設定してから FileStream オブジェクトの書き込みメソッドを呼び出すだけで簡単にできます。書き込みメソッドには、次のように String 型の XML データを渡します。
var prefsXML:XML = <prefs><autoSave>true</autoSave></prefs>;
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
fileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += prefsXML.toXMLString();
fileStream.writeUTFBytes(outputString);
fileStream.close();
これらの例では、ファイルが UTF-8 形式であるという前提で、
readUTFBytes()
メソッドと
writeUTFBytes()
メソッドを使用しています。形式が異なる場合は、別のメソッドを使用する必要がある場合があります(
データ形式と使用する読み取りおよび書き込みメソッドの選択
を参照)。
上記の例では、同期操作用に開いた FileStream オブジェクトを使用しています。ファイルは非同期操作用に開くこともできます(イベントに応答するイベントリスナー関数が必要になります)。例えば、次のコードは、XML ファイルを非同期で読み取る方法を示しています。
var file:File = File.documentsDirectory.resolvePath("AIR Test/preferences.xml");
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(Event.COMPLETE, processXMLData);
fileStream.openAsync(file, FileMode.READ);
var prefsXML:XML;
function processXMLData(event:Event):void
{
prefsXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
fileStream.close();
}
ファイル全体が読み取りバッファーに読み取られると(FileStream オブジェクトから
complete
イベントが送出されると)、
processXMLData()
メソッドが呼び出されます。これにより、
readUTFBytes()
メソッドが呼び出されて String 型の読み取りデータが取得され、そのストリングに基づいて XML オブジェクトである
prefsXML
が作成されます。
これらの機能を示すサンプルアプリケーションについては、「
XML 環境設定ファイルの読み取りおよび書き込み
」を参照してください。