Sunday, January 14, 2024

How to read a text file as String in Java? Example

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 that you can use to read the 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 a List of String e.g. into an ArrayList, you can use Files.readAllLines() method. This returns 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 the lower version.

In this article, we'll look at a couple of examples to demonstrate how to read a text file as a 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 versions.



Reading a Text File as String in Java - Files.readAllBytes() Example

This is the standard way to read the whole file as String in Java. Just make sure the file is 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. The above code assumes that the file and platform's default character encoding are the same. If that's not the case then use the correct character encoding while converting byte array to String in Java. See these free Java Programming online courses to learn more about character encoding and converting bytes to text in Java.





Reading Text File as String in Java - BufferedReader Example

This was the old way of reading a file as String in Java. You can see that it requires 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. If you are not familiar with \n or \r\n, I suggest you join a comprehensive Java course The Complete Java Masterclass to learn more about special characters in Java.


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 approaches 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 leaks, especially when you are not using the 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 the old way if you are using Java 6 or lower versions. Pay attention to the 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 the same.

Related Java File tutorials you may like
  • How to write to a file using BufferedWriter in Java? (solution)
  • How to read/write an XLSX file in Java? (solution)
  • How to read a text file using BufferedReader in Java? (example)
  • How to load data from a CSV file in Java? (example)
  • How to append text to a file in Java? (solution)
  • How to read InputStream as Stream in Java? (example)
  • How to find the highest occurring word from a file in Java? (solution)
  • 2 ways to read a text file in Java? (solution)
That's all about how to read data from a file as a String in Java. This is a useful technique Java developers should know, it can be helpful in many cases like loading log files or content files. 

5 comments:

  1. idk how to solve the path.get error of this programme though i tried with Paths.get method using a Paths.get method is of URI so it is giving me compilation error.it's showing me "The method get(String) is undefined for the type Path".
    so,[ please help me with that.

    ReplyDelete
  2. God bless you, I am facing this problem since last week. But you solve my problem. I am very happy now. Thanks

    ReplyDelete
  3. Sir but how can I read Int values it shows aski values

    ReplyDelete
    Replies
    1. Can you give more detail? may be share the code you are using to read the int, that can help

      Delete

Feel free to comment, ask questions if you have any doubt.