Contents
1. Introduction
There are several ways of reading text from a file in Java. Let us learn about them. We also show you how to read a file line by line.
2. Read and Print a Text File
The following code shows the most basic way of reading a text file in java. We use a FileReader for the purpose.
First we use a try-with-resources block to automatically close the opened file at the end of the block. Next we use a character array to read the text in. Finally the character arrays is converted to a String and printed to System.out.
try (FileReader in = new FileReader(fileName)) { char[] cbuf = new char[2048]; int len; while ((len = in.read(cbuf)) != -1) { String str = new String(cbuf, 0, len); System.out.print(str); } }
Some exceptions are possible with this code – including FileNotFoundException while opening the file, and IOException while reading the file contents. Catch the exceptions if you have any special handling to do.
3. Read UTF-16 Encoded Text File
While the above code suffices to read text from a file, what if you need to read a text file encoded in a different encoding? The code above uses the platform-default encoding to read the file. On my system this is UTF-8; it might be different on yours. Regardless, we should know how to read a text file in a different encoding.
The key to opening a file with a different encoding is a two-step process as follows: open an InputStream to the file and use InputStreamReader to specify the encoding.
String encoding = "UTF-16"; FileInputStream fin = new FileInputStream(fileName); InputStreamReader in = new InputStreamReader(fin, encoding);
Other than this change, reading a file is now as easy as before. Here is the complete code:
try (FileInputStream fin = new FileInputStream(fileName); InputStreamReader in = new InputStreamReader(fin, "UTF-16");) { char[] cbuf = new char[2048]; int len; while ((len = in.read(cbuf)) != -1) { String str = new String(cbuf, 0, len); System.out.print(str); } }
4. Read Text File using nio.Files
If you want to read the complete file into memory (into a String), here is a simple way to do it. Not advisable if the file is large. You can specify a different encoding if the file you are reading is not UTF-8.
byte[] buf = Files.readAllBytes(Paths.get(fileName)); String str = new String(buf,"UTF-8"); System.out.print(str);
Here are some more ways of reading a complete file into memory.
5. Read File Line by Line
Let us now look at several methods where we can read a text file line by line. The simplest way is shown below (possible from Java 1.0) – Use BufferedReader.readLine() method.
try (BufferedReader in = new BufferedReader(new FileReader(fileName))){ String line; while ((line = in.readLine()) != null) { System.out.println(line); } }
6. Stream Lines of a Text File
With Java 8 enhancements, we can stream all the lines of a text file and use it as follows:
try (BufferedReader in = new BufferedReader(new FileReader(fileName))){ in.lines().forEach(System.out::println); }
7. Use Scanner to Read Lines
Java provides a class called Scanner which can be used to read all the lines of a file in a loop as follows:
try (Scanner scanner = new Scanner(Paths.get(fileName), "UTF-8")) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } }
8. Read File Lines into a List
Or how about using Files.readAllLines() to read all the lines of a file into a List.
List<String> lines = Files.readAllLines(Paths.get(fileName)); lines .stream() .forEach(System.out::println);
Summary
This article demonstrated how to read a text file in Java. We also learned how to open and read a text file in a different encoding. Sometimes reading the whole contents of a file is required. This can be accomplished using several methods as shown above.