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;
}
}
}
この記事が気に入ったらサポートをしてみませんか?