【Android】フォルダ圧縮

Android

通常、ZIP形式を使用してフォルダを圧縮する方法は、以下のようになります。java.util.zipパッケージを使用してフォルダを圧縮できます。以下に、サンプルコードを示します。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtils {

    private static final int BUFFER_SIZE = 4096;
    // メソッドは、指定されたフォルダ(sourceFolder)を ZIP ファイル(zipFile)として圧縮
    public static void zipFolder(File sourceFolder, File zipFile) throws IOException {
        //File sourceFolder: 圧縮したい元のフォルダ。
        //File zipFile: 出力先の ZIP ファイル。

        //FileOutputStream を使って ZIP ファイルを書き出す準備。
        //ZipOutputStream を使って ZIP 形式でデータを書き込む。
        //addFolderToZip メソッドを呼び出して、フォルダの中身を再帰的に ZIP に追加。
        try (FileOutputStream fos = new FileOutputStream(zipFile);
             ZipOutputStream zos = new ZipOutputStream(fos)) {
            addFolderToZip(sourceFolder, sourceFolder.getName(), zos);
        }
    }

    //指定されたフォルダの中身を ZIP に追加する処理の一部で、特に再帰的にフォルダをたどってファイルを追加する構造
    private static void addFolderToZip(File folder, String parentFolder, ZipOutputStream zos) throws IOException {
        File[] files = folder.listFiles();
        if (files == null) {
            return;
        }
        //フォルダ内のすべてのファイル・サブフォルダを順番に処理するループ。
        for (File file : files) {
            if (file.isDirectory()) {
                addFolderToZip(file, parentFolder + "/" + file.getName(), zos);
            } else {
                addFileToZip(file, parentFolder, zos);
            }
        }
    }
    //ZIP ファイルに1つのファイルを追加する処理
    private static void addFileToZip(File file, String parentFolder, ZipOutputStream zos) throws IOException {
        try (FileInputStream fis = new FileInputStream(file);
             BufferedInputStream bis = new BufferedInputStream(fis, BUFFER_SIZE)) {
            String zipEntryName = parentFolder + "/" + file.getName();
            ZipEntry zipEntry = new ZipEntry(zipEntryName);
            zos.putNextEntry(zipEntry);

            byte[] buffer = new byte[BUFFER_SIZE];
            int length;
            while ((length = bis.read(buffer)) >= 0) {
                zos.write(buffer, 0, length);
            }

            zos.closeEntry();
        }
    }
}

このサンプルコードでは、ZipUtils クラスを定義し、フォルダを圧縮するためのメソッド zipFolder を提供しています。zipFolder メソッドは、指定されたフォルダを再帰的に読み取り、すべてのファイルとサブフォルダをZIPファイルに追加します。

使用方法は以下の通りです。

java

File sourceFolder = new File("/path/to/source/folder");
File zipFile = new File("/path/to/destination/folder.zip");

try {
    ZipUtils.zipFolder(sourceFolder, zipFile);
    // フォルダが正常に圧縮されました
} catch (IOException e) {
    e.printStackTrace();
    // エラーが発生しました
}

コメント