Categories: Java

【Java入門】zipファイルを生成してBase64エンコードする方法

Base64エンコードされた文字列をテキストファイルに書き込みそれをzipファイルに圧縮してBase64エンコードする方法

以下は「apple」という文字列を「sample.txt」に出力し、これをzip形式に圧縮してBase64エンコードする例です。
「apple」という文字列はBase64エンコードされた状態で保持していることを前提にしています。
この方法の場合、テキストファイルやzipファイルを中間ファイルとして出力することなく、メモリ上で完結します。 また、下記のコードはtry-with-resources構文であるため、zos.closeEntry()を記述しなくてもクローズしてくれます。

Java

// 圧縮対象のファイル名
String fileName = "sample.txt";

// 圧縮対象ファイルに書き込むテキストをBase64で保持(中身はapple)
String target = "YXBwbGU=";

// テキストをBase64デコードする
byte[] decodedStr = Base64.getDecoder().decode(target);

// zipファイルを作成
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(baos);
try (ZipOutputStream zos = new ZipOutputStream(bos)) {
	zos.putNextEntry(new ZipEntry(fileName));
	zos.write(decodedStr);
	//zos.closeEntry();
}

// zipファイルをBase64エンコード
String res = Base64.getEncoder().encodeToString(baos.toByteArray());
System.out.println(res);

実行結果として出力されるzipファイルのBase64エンコード値は以下のとおりです。

UEsDBBQACAgIANKhSlUAAAAAAAAAAAAAAAAKAAAAc2FtcGxlLnR4dEssKMhJBQBQSwcIUNAuqQcAAAAFAAAAUEsBAhQAFAAICAgA0qFKVVDQLqkHAAAABQAAAAoAAAAAAAAAAAAAAAAAAAAAAHNhbXBsZS50eHRQSwUGAAAAAAEAAQA4AAAAPwAAAAAA

これをzipファイルとして出力するには以下のように記述します。

なお、中身のファイルによって文字エンコードを適宜設定する必要があります。

Java

public static void main(String[] args) throws FileNotFoundException, IOException {

    // 書き込み先パス
    String outPutFilePath = "C:\\workspace\\result\\result.zip";

    // Base64文字列(SJIS)
    String base54Str = "ここに上記のBase64エンコード値を設定する。";

    // デコードしてbyteに変換する
    byte[] decodedStr = Base64.getDecoder().decode(base54Str);

    // SJISでファイル出力
     try(FileOutputStream fos = new FileOutputStream(outPutFilePath);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        OutputStreamWriter osw = new OutputStreamWriter(bos, "SJIS");
        PrintWriter	pw = new PrintWriter(osw);){

        pw.write(new String(decodedStr, "SJIS"));
    }
}

以下の記事もおすすめです。


以上で記事の解説はお終い!

もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!

issiki_wp