Archive for 7月, 2009
AIRでzipファイルの圧縮と展開(解凍)できるライブラリを公開します。
使い方
読み込み方法
import com.coltware.commons.zip.ZipEntry;
import com.coltware.commons.zip.ZipEvent;
import com.coltware.commons.zip.ZipFileReader;
private function unzip(file:File):void{
var zipReader:ZipFileReader = new ZipFileReader();
zipReader.open(file); <- Fileオブジェクトを設定してください
var entries:Array = zipReader.getEntries();
for(var i:int = 0; i<entries.length; i++){
var entry:ZipEntry = entries[i] as ZipEntry;
var filename:String = entry.getFilename();
var bytes:ByteArray = zipReader.unzip(entry);
// ここで、ByteArrayのデータをファイル等に書き出してください。
// getFilename() は、文字コードを自動的にSJISもしくはUTF-8を判別します。
// MACの濁点も解決します。
// ただし、展開処理で bytearray.uncompress(...) を使っているだけなので、なぜか解凍が失敗するものもあります。
}
ってのがおおよその、展開方法です。
zipReader.addEventListener(ZipEvent.ZIP_DATA_UNCOMPRESS,uncompressData); zipReader.unzipAsync(entry);
とすれば、非同期で展開が行われます。
private function uncompressData(e:ZipEvent):void{
var entry:ZipEntry = e.entry;
var file:File = dir.resolvePath(entry.getFilename());
var fs:FileStream = new FileStream();
fs.open(file,FileMode.WRITE);
fs.writeBytes(e.data);
fs.close();
}
のようにしてZipEntryとdata(ByteArray)で操作が行えます。
次回は、書き込みの方法も紹介します。
いま、ソースにコメントを書き込み中・・・・
asdocもできたらドキュメントともにソースも公開したいと思います。
前回、zipファイルの解凍アプリを作ったが、これを環境を移動したときに動くのかチェックをしたいと思ったが、
インストールせずに動作を確認できないだろうか?
とふと思った。
まあ、ほんとにデバッグ的な使い方なのです。
Adobe AIRのSDKではADL(AIR Debug Launcher)というツールが付いているのでこれで実行してみる。
1) まず、xxxxx.airを解凍する。(zipで圧縮されているので解凍ソフトが拡張子で判断する時には.airに変更する。
ちなみに私が作ったzip解凍は拡張子ではなく、ファイルの中身をみるので拡張子を変えなくてもOKなのです。
2) META-INF/AIR/application.xmlがあるので、これを解凍したフォルダ直下に移動(コピー)する。
ここには、実際のswfファイルがあります。
3) 以下のコマンドを実行する
adl.exe application.xml
と、これでOKのはずです。
注意)2009/8/6現在は、バージョンアップしております。
新しいバージョンはこちらからどうぞ。
Zipの解凍方法もほぼほぼわかったので、Zip解凍AIRアプリを作ってみました。
Adobeさんに載っていたZIPファイルの読み方をサンプルに、いろいろとそれから勉強してみました。
それで、ZIPファイルはファイルの後ろから読むんですね。
このおかげで、非同期読み込みで処理をして固まらないようにしたかったのですが、
できず、setTimeout関数を使って解凍処理はバックグラウンドで処理をしています。
ファイル名のSJISとUTF-8は自動的に判断しています。(Macの濁点などの問題も一応解決しています。)
現在の制約は・・・・
パスワード付きZipは解凍できません。
また、解凍もzipファイルのあるフォルダにしか解凍できません。
こちらからどうぞ
ちなみに確認した環境はWindows Vistaです。
今後、部分解凍(選択したファイルのみ)とか、エラー処理とか・・・・ いろいろやっていきたいと思います。
Flex Builderとsubversion(subclipse)を一緒に使っていて、コミットするとたまに、
「ワークスペースをビルド中」というメッセージで固まってしまうときがある。
なぜだか原因がわからない。そこで、いろいろ試してみる。
1)強制終了&再起動
2)起動時にキャッシュをクリアするようにする。 ( eclipse.exe -clean )
3).metadata\.plugins\org.tigris.subversion.subclipse.coreにある .svnProviderState を削除
4)ワークスペースを再作成
意味があるのかないのかよくわからないが経験則で1から3のようなことをしている。
ほかにもがちゃがちゃとやっているので、それらが影響しているかわからないが、これらで解決してきた。
4)をやれば100%解決できるが、これだとコミットしていないファイルがあると面倒である。
今日の収穫は3)の方法が追加できたことだ。
ライブラリプログラムや、サンプルプログラムと、アプリケーションを作成するためのワークスペースを分けていると、
たびたびワークスペースの切り替えをする必要が出てくる。
これがいちいち面倒だ。起動時に分けて立ち上げたい。
FlexBuilderはしょせん Eclipseだ。
Eclispeの起動オプションを使って起動時にワークスペースを指定して起動しよう。
そうすれば、異なるワークスペースが起動時に指定できる。
設定方法: Windowsの場合)
1.Flex Builder3のプログラムからまずショートカットを作成する。
2.リンク先の最後に -data [ワークスペースのパス]
例)
"C:Program FilesAdobeFlex Builder 3FlexBuilder.exe" -data F:flex
とこんな感じだ。
これをワークスペースごとの作成すればいい。


