見出し画像

AndroidでのZipの圧縮と解凍

1. zt-zip

AndroidでZipの圧縮と解凍を行うには、zt-zipを使います。Zipのアーカイブ形式をサポートします。

2. プロジェクトの設定

「build.gradle(Module: app)」のdependenciesに以下を追加します。

implementation 'org.zeroturnaround:zt-zip:1.12'

3. コード

Zipの圧縮と解凍を行うコードは次の通りです。
アセットに配置した「resouece1.txt」「resource2.txt」「resource3.txt」を内部ストレージにコピーした後、Zipでの圧縮と解凍を行っています。

package net.npaka.captureclassificationex;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Window;
import org.zeroturnaround.zip.ZipUtil;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

//AppDelegate
public class AppDelegate extends Activity {
   //アプリ起動時に呼ばれる
   @Override
   public void onCreate(Bundle bundle) {
       super.onCreate(bundle);
       requestWindowFeature(Window.FEATURE_NO_TITLE);

       //Zipの圧縮と解凍
       testZip();
   }

   //Zipの圧縮と解凍
   private void testZip() {
       //アセットからストレージにファイルをコピー
       assets2storage("resource1.txt");
       assets2storage("resource2.txt");
       assets2storage("resource3.txt");
       String storage_dir = getFilesDir().getPath();
       ls(storage_dir);

       //フォルダの生成
       new File(storage_dir+"/compress").mkdir();
       new File(storage_dir+"/decompress").mkdir();

       //ファイルをcompressフォルダにコピー
       copyFile(storage_dir+"/resource1.txt", storage_dir+"/compress/resource1.txt");
       copyFile(storage_dir+"/resource2.txt", storage_dir+"/compress/resource2.txt");
       copyFile(storage_dir+"/resource3.txt", storage_dir+"/compress/resource3.txt");
       ls(storage_dir+"/compress");

       //Zipで圧縮
       ZipUtil.pack(new File(storage_dir+"/compress"),
           new File(storage_dir + "/compress.zip"));
       ls(storage_dir);

       //Zipで解凍
       ZipUtil.unpack(new File(storage_dir + "/compress.zip"),
           new File(storage_dir+"/decompress"));
       ls(storage_dir+"/decompress");
   }

   //ファイルのコピー
   private void copyFile(String from, String to) {
       new File(to).delete();
       new File(from).renameTo(new File(to));
   }

   //ストレージの一覧表示
   private void ls(String path) {
       String[] files = new File(path).list();
       String str = "ls["+path+"]>>>";
       for (int i = 0; i < files.length; i++) {
           str += files[i]+",";
       }
       android.util.Log.d("debug", str);

   }

   //アセットから内部ストレージにファイルをコピー
   private boolean assets2storage(String asset_file) {
       try {
           InputStream in = getAssets().open(asset_file);
           FileOutputStream out = openFileOutput(asset_file, Context.MODE_PRIVATE);
           byte[] buff = new byte[1024];
           int len = 0;
           while ((len = in.read(buff)) >= 0) {
               out.write(buff, 0, len);
           }
           out.close();
           in.close();
           return true;
       } catch (Exception e) {
           e.printStackTrace();
           return false;
       }
   }
}


この記事が気に入ったらサポートをしてみませんか?