Zipファイルの解凍

2011/08/14
ZipFile と ZipEntry ~Androidでzipを解凍する を参考に ZIP ファイルを解凍してみる。

サンプルコード

ボタンをクリックして、SDカード/パッケージ名/sample.zip ファイルを SDカード/パッケージ名/sample/ に解凍。 ※sample.zip は sample ディレクトリを含むZIP [java] public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button zipAcvhiveButton = (Button) findViewById(R.id.zipArchiveButton); zipAcvhiveButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { String zipfileName = "sample.zip"; String baseDir = Environment.getExternalStorageDirectory().getPath() + "/" + v.getContext().getPackageName() + "/"; String zipPath = baseDir + zipfileName; String sampleDir = baseDir + "sample"; new File(sampleDir).mkdir(); zipArchiveFiles(zipPath, baseDir); } }); } public void zipArchiveFiles(String zipPath, String outputDir) { err = 0; try { ZipFile zipFile = new ZipFile(zipPath); Enumeration enumeration = zipFile.entries(); while(enumeration.hasMoreElements()) { ZipEntry zipEntry = enumeration.nextElement(); String outputPath = outputDir + zipEntry.getName(); zipArchiveFile(zipPath, zipEntry.getName(), outputPath); } zipFile.close(); } catch(Exception ex) { err = -1; Log.d( "Err", "" + ex); } } public int err = 0; public void zipArchiveFile(String zipPath, String file, String outFile) { err = 0; try { ZipFile zipFile = new ZipFile(zipPath); ZipEntry entry = zipFile.getEntry(file); InputStream inputStream = zipFile.getInputStream(entry); OutputStream outputStream = new FileOutputStream(outFile); byte[] buffer = new byte[ 1024 * 4 ]; int r = 0; while( -1 != ( r = inputStream.read(buffer)) ) { outputStream.write( buffer, 0, r ); } outputStream.close(); inputStream.close(); zipFile.close(); } catch( Exception ex ) { err = -1; Log.d( "Err", "" + ex); } } [/java] Android の Zip書き出しは、ちょっと手続きが多いみたいです。 Environment.getExternalStorageDirectory().getPath() で SDカードのパスが取得できる。 zipFile.entries() でZip一覧(ZipEntry を継承したEnumeration)を取得し、ループで1ファイルずつ解凍する。 ちなみに、zipEntry.getName() でファイル名を取得するが、Zip にディレクトリを含む場合はディレクトリを含むパスになる。

sample/xxxx.txt

Zip からの書き出しは ZipFile() で各ファイルパスを指定し、zipFile.getInputStream() でInputStream オブジェクトを取得。 InputStream をループで回し、OutputStream で指定したパスにファイルを書き出す。 ※サンプルの場合、1024 x 4 バイトずつ処理 うーん、もうちょっと簡単にならないのかな? もしかしたら、他の方法もあるかも知れませんが。。。
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel 7 リリース
v-html でHTML表示する
Laravel で Vue コンポーネントを使う
Laravel で Nuxt.js を使ってみる(Docker環境)
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Dockerで不要なコンテナ・イメージを削除
Mac で Laradock の構築
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加