以下は「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がオススメ!同僚に差をつけよう!