Thursday, 25 August 2016

How to read a text file as String in Java

There was no easy way to read a text file as String in Java until JDK 7, which released NIO 2. This API now provides a couple of utility methods which you can use to read entire file as String e.g. Files.readAllBytes() returns a byte array of the entire text file. You can convert that byte array to String to have a whole text file as String inside your Java program. If you need all lines of files as List of String e.g. into an ArrayList, you can use Files.readAllLines() method. This return a List of String, where each String represents a single line of the file. Prior to these API changes, I used to use the BufferedReader and StringBuilder to read the entire text file as String. You iterate through the file, reading one line at a time using readLine() method and appending them into a StringBuilder until you reach the end of the file. You can still use this method if you are running on Java SE 6 or lower version.
In this article, we'll look at a couple of examples to demonstrate how to read a text file as String, or get a List of lines as String from a text file. I'll also show the BufferedReader way, which you can use in Java SE 6 and earlier version.



Reading Text File as String in Java 7

This is the standard way to read the whole file as String in Java. Just make sure the file is a small or medium size and you have enough heap space to hold the text from a file into memory. If you don't have enough memory, the below code can throw java.lang.OutOfMemoryError: Java heap space, so beware of that.
 Here is the method to read a file as String in Java 7:
public static String readFileAsString(String fileName) {
    String text = "";
    try {
      text = new String(Files.readAllBytes(Paths.get("file.txt")));
    } catch (IOException e) {
      e.printStackTrace();
    }

    return text;
  }

You should also be careful with character encoding. Above code assumes that file and platform's default character encoding is same. If that's not the case then use the correct character encoding while converting byte array to String in Java.

Reading Text File as String in Java 6

This was the old way to reading a file as String in Java. You can see that it require almost 8 to 10 lines of code, which can now effectively be done in just one line in Java 7. It uses the readLine() method to read the file line by line and then joined them together using StringBuilder's append() method.

    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    StringBuilder sb = new StringBuilder();

    String line = br.readLine();
    while (line != null) {
      sb.append(line).append("\n");
      line = br.readLine();
    }

    String fileAsString = sb.toString();

Don't forget to append the \n character to insert the line break, otherwise, all lines will be joined together and all text from the file will come as just one big line.

Java Program to read a text file as String

Here is the complete Java program to read a text file as String, it includes both JDK 6 and JDK 7 approach to reading the content of the file in a String variable.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

/*
 * Java Program read a text file as String 
 * first by using the JDK 7 utility method Files.readAllBytes()
 * and second by using BufferedReader and StringBuilder.
 */

public class ReadFileAsString {

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

    // read whole file as String in JDK 7
    String data = "";
    try {
      data = new String(Files.readAllBytes(Paths.get("file.txt")));
    } catch (IOException e) {
      e.printStackTrace();
    }
    System.out.println("Text file as String in Java");
    System.out.println(data);

    // read file as String in Java SE 6 and lower version
    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    StringBuilder sb = new StringBuilder();

    String line = br.readLine();
    while (line != null) {
      sb.append(line).append("\n");
      line = br.readLine();
    }

    String fileAsString = sb.toString();
    System.out
        .println("whole file as String using BufferedReader and StringBuilder");
    System.out.println(fileAsString);

    br.close();
  }
}

Output
Text file as String in Java
Effective Java is the best book for senior Developers.
Clean code is the best book for Junior Developers.
whole file as String using BufferedReader and StringBuilder
Effective Java is the best book for senior Developers.
Clean code is the best book for Junior Developers.

In the second example, don't forget to append the "\n" or "\r\n" depending upon whether you are running on Windows or UNIX, otherwise all lines of files are concatenated into just one line. Also, don't forget to close the BufferedReader to prevent resource leak, especially when you are not using automatic resource management feature of Java 7.


That's all about how to read a text file as String in Java. You can use the new way if your program is running on JRE 7 and old way if you are using Java 6 or lower versions. Pay attention to character encoding of the file if you are not sure whether both file and platform's default character encoding (the machine where your Java program is running) is not same.

No comments:

Post a Comment