FlashPlayer10 テキストファイルを開く、保存する
前回のでテイストファイルをローカルに直接保存しましたが、今度は
ローカルのテキストファイルを開き、編集して保存してみます。
やってみたんだけど、「上書き保存」ができず。。
存在しているファイルと同じ名前で保存しようとするとIOErrorになります。
これはなんででしょう・・・仕様?
別名保存であれば下記のスクリプトでいけます。
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.net.FileReference; import flash.events.*; import flash.text.TextField; import flash.text.TextFieldType; public class Main extends Sprite{ private var txt:TextField; public function Main() { //テキスト入力 txt = new TextField(); txt.width = 400; txt.multiline = true; txt.text = ""; txt.border = true; txt.type = TextFieldType.INPUT; txt.x = 20; txt.y = 20; addChild(txt); //読み込みボタン var bd1:BitmapData = new BitmapData(120, 60, false, 0xFF6600); var bm1:Bitmap = new Bitmap(bd1); var mc1:Sprite = new Sprite(); mc1.addChild(bm1); mc1.x = 20; mc1.y = 200; addChild(mc1); mc1.buttonMode = true; mc1.addEventListener(MouseEvent.CLICK, selectFile); //保存ボタン var bd2:BitmapData = new BitmapData(120, 60, false, 0x000000); var bm2:Bitmap = new Bitmap(bd2); var mc2:Sprite = new Sprite(); mc2.addChild(bm2); mc2.x = 160; mc2.y = 200; addChild(mc2); mc2.buttonMode = true; mc2.addEventListener(MouseEvent.CLICK, saveFile); } private function selectFile(e:MouseEvent):void { var ff:FileReference = new FileReference(); ff.addEventListener(Event.SELECT, loadFile); ff.browse(); } private function loadFile(e:Event):void { var ff:FileReference = FileReference(e.target); ff.addEventListener(Event.OPEN, function(e:Event):void { trace("open"); } ); ff.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void { trace("progress"); } ); ff.addEventListener(Event.COMPLETE, setText ); ff.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void { trace("ioError"); } ); ff.load(); } private function setText(e:Event):void { txt.text = e.target.data; } private function saveFile(e:MouseEvent):void { var ff:FileReference = new FileReference(); ff.addEventListener(Event.OPEN, function(e:Event):void { trace("open"); } ); ff.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void { trace("progress"); } ); ff.addEventListener(Event.COMPLETE, function(e:Event):void { trace("complete"); } ); ff.addEventListener(Event.CANCEL, function(e:Event):void { trace("cancel"); } ); ff.addEventListener(Event.SELECT, function(e:Event):void { trace("select"); } ); ff.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void { trace("ioError",e.target,e.text); } ); ff.save(txt.text,"saveTextTest.txt"); } } }
| 固定リンク
この記事へのコメントは終了しました。
コメント
とても参考になりました。ありがとうございます。
テキストファイルがUTF-8でない場合、なんだかうまくいかなかったので、ちょこちょこと修正したら、だいたい思い通りのものになってきまました。
もし宜しければ教えていただきたいのですが、
ff.browse();
したときに、ファイル選択ダイアログが表示されますが、このタイトルバーのところにある「『サーバ名』にアップロードするファイルを選択します」のような文言はカスタマイズ不可のでしょうか? やはりセキュリティ的な事由で。
ファイルをアップロードさせるのではなく、たんにメモ帳ライクに開かせ読み込ませるだけなのに、誤解を与えそうですから、「サーバには何も送られません」といいたいです。でも、ff.browse();した時点で、実際にサイト側がアップロードさせる意思があるかないかはFlashでは当然判断できないわけで、そういう意味では、そのような危険性をユーザーに知らしめる意味では、この仕様も仕方ないのでしょうかね。
だったら、ff.browse();はアップローも可能だけれど、ff.selectFile();みたいなメソッドが別にあって、この形で選択されたファイルは読み込みや参照はできるけれど、アップロードさせることは不可能みたいな仕様にはできないのかなと考えたりしました。
投稿: shimax | 2008年12月16日 (火) 23時10分