AIRアプリでZIPファイルを解凍してみる

20101208_as1.jpg

ActionScriptの標準ライブラリではZIPファイルの解凍機能は提供されていないので、自分で作るか、他人様が作成されて公開されているものを使うしかない。

勉強がてら作ってみるのは面白いのだが、今回の仕事はそういうライブラリが存在していることを前提に作業工数を見積もっているので、

FZip - http://codeazur.com.br/lab/fzip/

という、フリーのライブラリを使ってみた。(商用利用も問題なさげ)

日本語のドキュメントがほとんど存在していないため、英語のサンプルソースを見てどうにかするしかなかったので少し時間がかかったが、例えば任意のZIPファイルを解凍するだけなら以下のようなソースになる。


<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    initialize="initProc()"
    layout="absolute" width="480" height="208">
    <mx:Label x="183" y="18" text="ZIP解凍 テスト" fontSize="18" id="Title"/>
    <mx:TextArea x="23" y="54" width="428" height="122" id="Message"/>

    <mx:Script>
    <![CDATA[

    import deng.fzip.FZip;    // ZIP操作ライブラリ
    import flash.events.*; 
    import flash.net.URLRequest;

    public var Fzip:FZip;
    public var ZipFileName:String    = "data/cont/ds.zip";
    public var ZipDirName:String    = "data/cont/ds/";

    private function initProc():void {

        Fzip = new FZip();

        var request:URLRequest = new URLRequest();
        var file:File = File.applicationStorageDirectory.resolvePath(ZipFileName);
        request.url = file.nativePath;

        Message.text    += "FN=" + file.nativePath + "\n";

        Fzip.addEventListener(Event.COMPLETE, loadComplete);
        Fzip.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

        Fzip.load(request);
 
    }
 
    public function loadComplete(evt:Event):void {

        var file:File;
        var stream:FileStream;

        for(var i:int=0; i < Fzip.getFileCount(); i++){

            Message.text    += Fzip.getFileAt(i).filename + "\n";

            file = File.applicationStorageDirectory.resolvePath(ZipDirName + Fzip.getFileAt(i).filename);       
            stream    = new FileStream();
            try {
                stream.open(file,FileMode.WRITE);
                stream.writeBytes(Fzip.getFileAt(i).content);
                Message.text    += "File Output Success. " + file.nativePath + "\n";
            }
            catch(error:IOError) {
                Message.text    += "File Output Error.\n";
            }
            finally {
                stream.close();
            }

        }

    }

    private function onIOError(evt:IOErrorEvent):void {

        Message.text    += "There was an IO Error.\n";

    }

    ]]>
    </mx:Script>

</mx:WindowedApplication>


これで、ばっりち applicationStorageDirectory 以下の data/cont/ds/ ディレクトリ以下にファイルが展開される。
FileStream は、子ディレクトリが存在していなければ勝手に掘ってくれるので楽だ。

トラックバック(0)

このブログ記事を参照しているブログ一覧: AIRアプリでZIPファイルを解凍してみる

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1394

コメントする

このブログ記事について

このページは、shinodaが2010年12月 9日 09:53に書いたブログ記事です。

ひとつ前のブログ記事は「久しぶりのフタバ@カフェは少し変わってしまっていた」です。

次のブログ記事は「まつもとゆきひろ氏の講演を聴きに」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら