文字列をBase64エンコードする
以下の例は、りんごapple林檎
という文字列をBase64変換するコードです。
Base64文字列をString型で保持したい場合はencodeToString
メソッドを使用します。
Java
// Base64エンコードしたい文字列を定義
String target = "りんごapple林檎";
// 文字列をBase64エンコードする
String result = Base64.getEncoder().encodeToString(target.getBytes());
// 結果を出力
System.out.println(result);
結果は以下のとおりです。これがりんごapple林檎
という文字列をBase64変換した値になります。
Java
44KK44KT44GUYXBwbGXmnpfmqo4=
文字列をBase64エンコードしてファイルに書き込む
以下の例は、りんごapple林檎
という文字列をBase64変換してファイルに書き込むコードです。
ファイルに書き込む際はBase64変換した値をbyte配列で保持しておく必要があるのでencode
メソッドを使用します。
Java
// 書き込み先パス
String outPutFilePath = "C:\\workspace\\result\\test.txt";
// Base64エンコードしたい文字列を定義
String target = "りんごapple林檎";
// 文字列をBase64エンコードする
byte[] result = Base64.getEncoder().encode(target.getBytes());
// エンコードした値をファイル出力
try(FileOutputStream fos = new FileOutputStream(outPutFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos);){
bos.write(result);
}
結果は以下のとおりです。
cat
コマンドでファイルの中身を表示しています。
Linuxコマンド
$ cat test.txt
44KK44KT44GUYXBwbGXmnpfmqo4=
文字列をBase64デコードする
以下の例は、Base64デコードして、元の文字列を取り出すコードです。 エンコードしたときにようにいきなりString型で受け取るメソッドは存在しないので、一旦byte配列で受け取る必要があります。
Java
// Base64デコードしたい文字列を定義
String target = "44KK44KT44GUYXBwbGXmnpfmqo4=";
// 文字列をBase64デコードする
byte[] decodedStr = Base64.getDecoder().decode(target);
// 結果を出力
System.out.println(new String(decodedStr));
結果は以下のとおりです。
Java
りんごapple林檎
文字列をBase64デコードしてファイルに出力する
以下の例は、Base64デコードして、元の文字列を取り出してファイル出力するコードです。
以下の例ではファイルに書き込む際にsjis
を指定していますが、UTF-8
等も可能です。
Java
// 書き込み先パス
String outPutFilePath = "C:\\workspace\\result\\test.txt";
// Base64デコードしたい文字列を定義
String target = "44KK44KT44GUYXBwbGXmnpfmqo4=";
// 文字列をBase64デコードする
byte[] decodedStr = Base64.getDecoder().decode(target);
// デコードした値をファイル出力
try(FileOutputStream fos = new FileOutputStream(outPutFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
OutputStreamWriter osw = new OutputStreamWriter(bos, "sjis");){
osw.write(new String(decodedStr));
}
結果は以下のとおりです。
cat
コマンドでファイルの中身を表示しています。
Linuxコマンド
$ cat test.txt
りんごapple林檎
任意のファイルをBase64エンコードする
sample.txt
というファイルを用意しました。ファイルの中身は以下です。これをBase64エンコードしてみます。
Linuxコマンド
$ cat sample.txt
apple
りんご
林檎
Javaコードは以下のとおりです。
Java
// Base64エンコードしたいファイルのパス
String targetFilePath = "C:\\workspace\\result\\sample.txt";
// ファイルの内容をbyteに変換する
byte[] data = Files.readAllBytes(Paths.get(targetFilePath));
// Base64エンコードする
String base64str = Base64.getEncoder().encodeToString(data);
// 結果を出力
System.out.println(base64str);
結果は以下のとおりです。これがsample.txt
というファイルをBase64変換した値になります。
このやり方だとテキストファイルに限らずzipファイルもBase64エンコードすることができます。
Java
YXBwbGUNCoLogvGCsg0Kl9GM5w==
Base64デコードしてファイルを復元する
以下は、Base64エンコード済みのファイルをデコードして元のファイルに戻すコードです。
Base64文字列がSJISの場合
Base64エンコードしたときの元のファイルがSJISの場合は、復元する場合もSJISにする必要があります。
Java
// 書き込み先パス
String outPutFilePath = "C:\\workspace\\result\\result.txt";
// Base64文字列(SJIS)
String base54Str = "YXBwbGUNCoLogvGCsg0Kl9GM5w==";
// デコードしてbyteに変換する
byte[] decodedStr = Base64.getDecoder().decode(base54Str);
// SJISでファイル出力
try(FileOutputStream fos = new FileOutputStream(outPutFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
OutputStreamWriter osw = new OutputStreamWriter(bos, "Shift-JIS");){
osw .write(new String(decodedStr, "Shift-JIS"));
}
結果は以下のとおりです。ファイルはSJISで作成されているはずです。
Linuxコマンド
$ cat result.txt
apple
りんご
林檎
SJISのBase64文字列でUTF-8のファイルを作りたい場合
以下のようにOutputStreamWriter
でUTF-8
を指定すればOKです。
OutputStreamWriter osw = new OutputStreamWriter(bos, "UTF-8");
ただし、この場合でもBase64文字列自体はSJISで保持しているわけなので、以下はSJISのまま変更してはいけません。
osw.write(new String(decodedStr, "SJIS"));
Base64文字列がUTF-8の場合
Base64エンコードしたときの元のファイルがUTF-8の場合は、復元する場合もUTF-8にする必要があります。
Java
// 書き込み先パス
String outPutFilePath = "C:\\workspace\\result\\result.txt";
// Base64文字列(UTF-8)
String base54Str = "YXBwbGUK44KK44KT44GUCuael+aqjg==";
// デコードしてbyteに変換する
byte[] decodedStr = Base64.getDecoder().decode(base54Str);
// UTF-8でファイル出力
try(FileOutputStream fos = new FileOutputStream(outPutFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
OutputStreamWriter osw = new OutputStreamWriter(bos, "UTF-8");){
osw .write(new String(decodedStr, "UTF-8"));
}
結果は以下のとおりです。ファイルはUTF-8で作成されているはずです。
Linuxコマンド
$ cat result.txt
apple
りんご
林檎
UTF-8のBase64文字列でSJISのファイルを作りたい場合
以下のようにOutputStreamWriter
でSJIS
を指定すればOKです。
OutputStreamWriter osw = new OutputStreamWriter(bos, "SJIS");
ただし、この場合でもBase64文字列自体はUTF-8で保持しているわけなので、以下はUTF-8のまま変更してはいけません。
osw.write(new String(decodedStr, "UTF-8"));
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!