Base64 Encoding in Java
Java 8+ provides the java.util.Base64 class for encoding and decoding.
Basic Usage
Encode to Base64
import java.util.Base64;
String text = "Hello, World!";
String encoded = Base64.getEncoder().encodeToString(text.getBytes());
System.out.println(encoded); // "SGVsbG8sIFdvcmxkIQ==" Decode from Base64
import java.util.Base64;
String encoded = "SGVsbG8sIFdvcmxkIQ==";
byte[] decoded = Base64.getDecoder().decode(encoded);
System.out.println(new String(decoded)); // "Hello, World!" URL-Safe Base64
Use getUrlEncoder() and getUrlDecoder() for URL-safe encoding:
import java.util.Base64;
String text = "Hello, World!";
// Encode
String encoded = Base64.getUrlEncoder().encodeToString(text.getBytes());
System.out.println(encoded);
// Without padding
String noPadding = Base64.getUrlEncoder().withoutPadding().encodeToString(text.getBytes());
System.out.println(noPadding);
// Decode
byte[] decoded = Base64.getUrlDecoder().decode(encoded);
System.out.println(new String(decoded)); MIME Base64
For MIME-formatted output (line breaks every 76 characters):
import java.util.Base64;
String text = "A very long string that needs to be wrapped...";
String encoded = Base64.getMimeEncoder().encodeToString(text.getBytes());
System.out.println(encoded); File to Base64
Encode a File
import java.util.Base64;
import java.nio.file.Files;
import java.nio.file.Path;
Path path = Path.of("image.png");
byte[] bytes = Files.readAllBytes(path);
String encoded = Base64.getEncoder().encodeToString(bytes);
System.out.println(encoded); Decode to File
import java.util.Base64;
import java.nio.file.Files;
import java.nio.file.Path;
String encoded = "iVBORw0KGgo..."; // Base64 string
byte[] decoded = Base64.getDecoder().decode(encoded);
Files.write(Path.of("output.png"), decoded); With Streams
For large files, use streams:
import java.util.Base64;
import java.io.*;
// Encode stream
try (InputStream in = new FileInputStream("input.bin");
OutputStream out = Base64.getEncoder().wrap(new FileOutputStream("output.txt"))) {
in.transferTo(out);
}
// Decode stream
try (InputStream in = Base64.getDecoder().wrap(new FileInputStream("input.txt"));
OutputStream out = new FileOutputStream("output.bin")) {
in.transferTo(out);
} Legacy (pre-Java 8)
For Java 7 and earlier, use Apache Commons Codec or javax.xml.bind.DatatypeConverter:
// javax.xml.bind (Java 6-8, removed in Java 11)
import javax.xml.bind.DatatypeConverter;
String encoded = DatatypeConverter.printBase64Binary(text.getBytes());
byte[] decoded = DatatypeConverter.parseBase64Binary(encoded);