■2011.03.02:作成
サンプル
サンプルのソース
サンプルは「
Flex4基本-F5等の対策」と同じものです。
ローカルファイルの読み書き
Flex4には「FileReference」と言うクラスがあり、このクラスを利用するとサーバを介さないでローカルファイルの読み書きが出来る。
これを使えばFlex4だけでローカルのファイルを読み込み、Flex4で処理して、処理結果をローカルファイルに保存することが出来る。
Windows上のローカルファイル(テキスト:漢字コードはshift-jis、改行コード"\r\n")を読み書きする。
ローカルファイル(テキスト)の読み込み
ローカルファイル(テキスト)の読み込みは以下の手順で行います。
fncLocalFileReadSyori:読み込みボタン等で実行される関数
クラスFileReferenceの作成
ファイル開くダイアログ用のファイルの拡張子フィルタをセット
ファイル開くダイアログを開く
onFileSelected:ファイル開くダイアログでファイルが選択されたときの関数
ファイルの読み込み完了時と読み込みエラー時のイベントに関数を指定
ファイルの読み込み実行
onFileLoaded:ファイルの読み込み完了時の関数
漢字コードをshift-jisからUTF8に変更
改行コードを"\r\n"から"\n"に変更
e.target.nameで読み込みファイル名取得
onFileLoadErr:ファイルの読み込みエラー時の関数
private var filRef:FileReference;
:
//ローカルファイルの読み込み
private function fncLocalFileReadSyori():void {
filRef = new FileReference();
var FilterTxt:FileFilter = new FileFilter("テキスト(*.txt)", "*.txt");
var FilterHtml:FileFilter = new FileFilter("HTML(*.html;*.htm)",
"*.html;*.htm");
var FilterAll:FileFilter = new FileFilter("全て(*.*)", "*.*");
filRef.browse([FilterTxt,FilterHtml,FilterAll]);
filRef.addEventListener(Event.SELECT, onFileSelected);
}
private function onFileSelected(e:Event):void {
filRef.addEventListener(Event.COMPLETE, onFileLoaded);
filRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadErr);
filRef.load();
}
//読み込み完了
private function onFileLoaded(e:Event):void {
var barrDat:ByteArray = e.target.data;
//漢字コード変換(shift-jis -> UTF8)
var strData:String = barrDat.readMultiByte(barrDat.length, "shift-jis");
//改行の変更
var arrDat:Array = strData.split("\r\n");
strData = arrDat.join("\n");
txtData.text=strData;
strFileName = e.target.name;
bolEditFlag = false;
dispTitle();
}
//読み込みエラー
private function onFileLoadErr(e:IOErrorEvent):void {
Alert.show("ローカルファイルへの読み込みを失敗しました。\n"+e.toString(),
"LocalFile");
}
ローカルファイル(テキスト)への書き込み
ローカルファイル(テキスト)への書き込みは以下の手順で行います。
fncLocalFileWrite:保存ボタン等で実行される関数
改行コードを"\n"から"\r\n"に変更
漢字コードをUTF8からshift-jisに変更
クラスFileReferenceの作成
ファイルの書き込み完了時と書き込みエラー時のイベントに関数を指定
ファイル保存ダイアログを開きデータを保存
onFileSave:ファイルの書き込み完了時の関数
e.target.nameで読み込みファイル名取得
onFileSaveErr:ファイルの書き込みエラー時の関数
//ローカルファイルへの保存----------------------------
private function fncLocalFileWrite():void {
var strData:String = txtData.text;
//改行の変更
var arrDat:Array = strData.split("\n");
strData = arrDat.join("\r\n");
//漢字コード変換(UTF8 -> shift-jis)
var barrDat:ByteArray = new ByteArray();
barrDat.writeMultiByte(strData, "shift-jis");
filRef = new FileReference();
filRef.addEventListener(Event.COMPLETE, onFileSave);
filRef.addEventListener(IOErrorEvent.IO_ERROR, onFileSaveErr);
filRef.save(barrDat,strFileName);
}
//保存完了
private function onFileSave(e:Event):void {
strFileName = e.target.name;
bolEditFlag = false;
dispTitle();
Alert.show("ローカルファイルへの保存しました。", "LocalFile");
}
//保存エラー
private function onFileSaveErr(e:IOErrorEvent):void {
Alert.show("ローカルファイルへの保存を失敗しました。\n"+e.toString(),
"LocalFile");
}
クリップボードへの書き込み
クリップボードへの書き込みの手順
改行コードを"\n"から"\r\n"に変更します。
System.setClipboard関数でクリップボードにセット
漢字コードの変更は不要ようです?、メモ帳等にペーストできました。
//クリップボードにコピー----------------------------------------
private function fncClipboardCopy():void {
var strData:String = txtData.text;
//改行の変更
var arrDat:Array = strData.split("\n");
strData = arrDat.join("\r\n");
try {
System.setClipboard(strData);
}
catch(e:Error){
Alert.show("クリップボードにコピーを失敗しました。\n"+e.toString(),
"LocalFile");
return;
}
Alert.show("クリップボードにコピーしました。","LocalFile");
}