Skip to content

Instantly share code, notes, and snippets.

@utsengar
Created October 11, 2011 00:27
Show Gist options
  • Select an option

  • Save utsengar/1276960 to your computer and use it in GitHub Desktop.

Select an option

Save utsengar/1276960 to your computer and use it in GitHub Desktop.
Encode a file to base64 binary in Java
import org.apache.commons.codec.binary.Base64;
private String encodeFileToBase64Binary(String fileName)
throws IOException {
File file = new File(fileName);
byte[] bytes = loadFile(file);
byte[] encoded = Base64.encodeBase64(bytes);
String encodedString = new String(encoded);
return encodedString;
}
private static byte[] loadFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
is.close();
return bytes;
}
@tbruyelle

Copy link
Copy Markdown

OutOfMemory can occur here new String(encoded)

@LulzAugusto

Copy link
Copy Markdown

Why not use Base64.encodeBase64String(bytes)?

@ImranTamboli

Copy link
Copy Markdown

hey...thank you so so much brother.its really helpful for me ...:) just need one change in code Base64.encodeBase64String(bytes).. thanx again

@hstarkar87

Copy link
Copy Markdown

Encode a file into Base64 format
http://www.codesolution.org/?p=299

@albfan

albfan commented Nov 10, 2015

Copy link
Copy Markdown

That solution didn't work.

Base64.encodeBase64(bytes).toString() outputs [B@c163956

Here you are a minimal working implementation

        File originalFile = new File("signature.jpg");
        String encodedBase64 = null;
        try {
            FileInputStream fileInputStreamReader = new FileInputStream(originalFile);
            byte[] bytes = new byte[(int)originalFile.length()];
            fileInputStreamReader.read(bytes);
            encodedBase64 = new String(Base64.encodeBase64(bytes));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

@RajeswariLakshman

Copy link
Copy Markdown

Problem solved. Gave file name with location .
String attachment_string= encodeFileToBase64Binary("C:\file_location"+fileName);

@DhineshManthiram

Copy link
Copy Markdown

Thanks albfan

@FherPie

FherPie commented Aug 23, 2016

Copy link
Copy Markdown

It doesn't mark error if I add this library to my project: https://commons.apache.org/proper/commons-codec/ I haven't tested yet.

@tnpradeep

Copy link
Copy Markdown

Hi,

I have an HTTP API which returns zip file contents as response which i have encoded in base 64 and passing it to my UI layer written in javascript.
But when I decode the contents using atob functoin in javascript, the contents of zip file is corrupted.

Please help me in solving this problem.

@LightMan

LightMan commented Oct 4, 2017

Copy link
Copy Markdown

Mine based on @albfan code:

private String encodeFileToBase64Binary(String filePath) { File originalFile = new File(filePath); String encodedBase64; try { FileInputStream fileInputStreamReader = new FileInputStream(originalFile); byte[] bytes = new byte[(int)originalFile.length()]; int numBytesRead = fileInputStreamReader.read(bytes); if (numBytesRead != -1) { // Log.d(TAG, "encodeFileToBase64Binary: could not read all the file"); return null; } encodedBase64 = android.util.Base64.encodeToString(bytes, DEFAULT); return encodedBase64; } catch (IOException e) { e.printStackTrace(); return null; } }

@onuryurtturk

Copy link
Copy Markdown

@LightMan pls check your numBytesRead if condition. You're returning null if some bytes read

@Khyati1992

Khyati1992 commented Feb 1, 2018

Copy link
Copy Markdown

@albfan, Hi, I am trying this but getting exception,

java.io.FileNotFoundException: android.content.res.AssetManager$AssetInputStream@197e3549: open failed: ENOENT (No such file or directory)

val file = File(Uri.parse(resources.openRawResource(R.raw.rec1).toString()).toString())
        var encodedBase64: String? = null
        try {
            val fileInputStreamReader = FileInputStream(file)
            val bytes = ByteArray(file.length().toInt())
            fileInputStreamReader.read(bytes)
            val result = Base64.encodeToString(bytes, Base64.DEFAULT)

            println("result--" + result)
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        } catch (e: IOException) {
            e.printStackTrace()
        }

@KingAmada

Copy link
Copy Markdown

A single line solution

byte[] bytes = Base64.getEncoder().encode(Files.readAllBytes(new File("filePath").toPath()));
System.out.print(bytes);

@manishboricha

Copy link
Copy Markdown

This is working like a charm, i am not converting image to string i just needed it in encoded format.....Thanks

@sheliyaparth

Copy link
Copy Markdown

Why not use Base64.encodeBase64String(bytes)?

@Zeriitas

Copy link
Copy Markdown

Guys cmon this was posted 10 years ago...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment