Java : Reading file contents into String

This page last changed on Jan 29, 2016 by admin.

About three times a year I have to accomplish the seemingly easy task of reading the contents of a file into a String. Apparently the Sun folks did not find it necessary to create an API for this. So this piece of obscure code is the best I can come up with. There should be a more elegant way to do this.

private String readFile(String fileName) {
    
    File file = new File(fileName);
    
    char[] buffer = null;
    
    try {
        BufferedReader bufferedReader = new BufferedReader(
                new FileReader(file));

        buffer = new char[(int)file.length()];

        int i = 0;
        int c = bufferedReader.read();

        while (c != -1) {
            buffer[i++] = (char)c;
            c = bufferedReader.read();
        }
    } catch (FileNotFoundException e) {
        log.error(e.getMessage());
    } catch (IOException e) {
        log.error(e.getMessage());
    }

    return new String(buffer);
}

Apache Commons IOUtils makes the job a breeze:

public String readFile(String fileName) throws IOException {
    
    StringWriter stringWriter = new StringWriter();
    IOUtils.copy(new FileInputStream(new File(fileName)), stringWriter);
    
    return stringWriter.toString();
}

Java NIO (as of Java 7) is currently the best solution: pure Java, not depending on any external library

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public String readFile(String fileName) throws IOException {
    return new String(Files.readAllBytes(Paths.get(fileName)));
}