How to Base64 Encode or Base64 Decode A File in Java using Apache Commons Codec

Without going much into the theory of Base64 Encoding Decoding, for which you can refer to this Wikipedia page, I am presenting here a program that can do a couple of things:

  1. Encode a file (any file type) using Base64 and write the file back to the filesystem
  2. Decode a Base64 encoded file and write the file back to the filesystem

I have used Apache Commons library. The version I used for testing this Utility is commons-code-1.4.jar. There are multiple uses of Base64 Codec. The one I had a need to was during Docusign eSignature webservice call where the files attached were sent in a Base64 encoded format.

package com.icodejava.blog;

/**
 * @author Kushal Paudyal
 * www.icodejava.com
 *
 * This class can be used to Base64 encode or Base64 decode a file. It uses apache commons codec library.
 * The library used for testing the functionality was commons-codec-1.4.jar
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.codec.binary.Base64;

public class FileCodecBase64 {

    private static final boolean IS_CHUNKED = true;

    public static void main(String args[]) throws Exception {

        /* Encode a file and write the encoded output to a text file. */
        encode("C:/temp/something.pdf", "c:/temp/something-encoded.txt", IS_CHUNKED);

        /* Decode a file and write the decoded file to file system */
        decode("C:/temp/something-encoded.txt", "c:/temp/something-decoded.pdf");
    }

    /**
     * This method converts the content of a source file into Base64 encoded data and saves that to a target file.
     * If isChunked parameter is set to true, there is a hard wrap of the output  encoded text.
     */
    private static void encode(String sourceFile, String targetFile, boolean isChunked) throws Exception {

        byte[] base64EncodedData = Base64.encodeBase64(loadFileAsBytesArray(sourceFile), isChunked);

        writeByteArraysToFile(targetFile, base64EncodedData);
    }

    public static void decode(String sourceFile, String targetFile) throws Exception {

        byte[] decodedBytes = Base64.decodeBase64(loadFileAsBytesArray(sourceFile));

        writeByteArraysToFile(targetFile, decodedBytes);
    }

    /**
     * This method loads a file from file system and returns the byte array of the content.
     * 
     * @param fileName
     * @return
     * @throws Exception
     */
    public static byte[] loadFileAsBytesArray(String fileName) throws Exception {

        File file = new File(fileName);
        int length = (int) file.length();
        BufferedInputStream reader = new BufferedInputStream(new FileInputStream(file));
        byte[] bytes = new byte[length];
        reader.read(bytes, 0, length);
        reader.close();
        return bytes;

    }

    /**
     * This method writes byte array content into a file.
     * 
     * @param fileName
     * @param content
     * @throws IOException
     */
    public static void writeByteArraysToFile(String fileName, byte[] content) throws IOException {

        File file = new File(fileName);
        BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
        writer.write(content);
        writer.flush();
        writer.close();

    }
}

Tagged , , , , , , , , , , , , , , . Bookmark the permalink.

3 Responses to How to Base64 Encode or Base64 Decode A File in Java using Apache Commons Codec

  1. Martin says:

    Muchas gracias, me ayudaste un monton con este pequeño articulo. Saludos desde Argentina!

  2. uday says:

    i am designing a program that takes input from a database and writes it into a pdf file. the part of the file where i write in nepali language is not supported by the java or the pdf reader. what may be the solution ?

  3. prachi says:

    I am trying to implement base 64 algorithm in Hadoop environment for encryption is it feasible solution for securing data inside that environment? Give me brief description what will be the possibilities?

Leave a Reply

Your email address will not be published. Required fields are marked *