Java
WebAPI
base64

Base64 java8で簡単 エンコード&デコード

はじめに

ファイルをアップロードするAPIを作ったときに
Base64を使った実装でちょっと戸惑ったのでメモがてら記述しておきます。
※サンプルは、テキストファイルにしてますが、Excelやzipなども問題なくできます。

やること

・Base64形式のファイルをデコードして、新たにファイルを作成する。
・ファイルを取得して、Base64形式にエンコードする。
つまり、デコードとエンコードしますということです。

環境

・java 8

デコード

// テスト用 base64形式のファイル
String text = "g2WDWINngsWCt4FJ";

byte[] decode = Base64.getDecoder().decode(text); // (1)
Path path = Paths.get("./sample.txt"); // (2)
Files.write(path, decode); // (3)

(1) base64文字列をデコードしてます。デコードしたファイル情報はバイトで持ちます。
(2) Paths.get()でファイルを作成します。
(3) FIles.write()を使用して(3)で作成したpathに(1)でデコードしたバイト情報を書き込みます。
これだけです。実行すると、sample.txtが出力されていると思います。
中身は「テストです!」となっているはずです。

エンコード

Path path = Paths.get("./sample.txt"); // (5)
byte[] encode = Base64.getEncoder().encode(Files.readAllBytes(path)); // (6)
String encodeStr = new String(encode); // (7)

(5) Paths.get()でファイルを取得します。
(6) 取得したPath(ファイル)をエンコードします。readAllBtes()で読み込んで、encode()でエンコード処理をしてます。まだ、ここでは、バイトでBase64の情報を持ってます。
(7) Stringのコンストラクタに(6)で生成したバイトを入れて、Base64形式にしてエンコード終了です。

確認

System.out.println(encodeStr);
if (text.equals(encodeStr)) {
  System.out.println("--- 正しくエンコードできました!!");
}

最後に上記のコードでも張り付けて、実行してみてください。
「正しくエンコードできました!!」と出力されます。
もちろん、デコードも正しく出来ているはずです。

全体

最後に全体載せておきます。
★のところは、デコード処理のところと重複しているのでコメントアウトしてあります。
Pathは1つ生成すればいいってことです。

// テスト用 base64形式のファイル
String text = "g2WDWINngsWCt4FJ";

// デコード
byte[] decode = Base64.getDecoder().decode(text); 
Path path = Paths.get("./sample.txt");
Files.write(path, decode);

// エンコード
// Path path = Paths.get("./sample.txt"); ★
byte[] encode = Base64.getEncoder().encode(Files.readAllBytes(path)); 
String encodeStr = new String(encode); 

// 確認
System.out.println(encodeStr);
if (text.equals(encodeStr)) {
  System.out.println("--- 正しくエンコードできました!!");
}

最後に

分かってしまえば簡単ですね。
ちなみに、try~catchは必要です!サンプルなので省いてます。
間違いあれば教えてください。