Problem:
How to read text file in Java? In this post we’re going to show the most straightforward way of reading text files using java.io.FileReader, thing that every Java developer needs to know!
Solution:
The solution is simple:
- create an instance of java.io.FileReader,
- wrap it in a java.io.BufferedReader to read lines,
- read lines until null is returned.
And here’s the code:
package com.farenda.java.io; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; public class ReadTextFileExample { public static void main(String[] args) throws IOException { Map<String,Integer> highScores = new LinkedHashMap<>(); String scoreFile = "highscores.csv"; try (BufferedReader input = openReader(scoreFile)) { System.out.println("File header: " + readHeader(input)); String row; while ((row = input.readLine()) != null) { parseRow(row, highScores); } } System.out.println("Read high scores:\n" + highScores); } private static BufferedReader openReader(String fileName) throws IOException { // Don't forget to add buffering to have better performance! return new BufferedReader(new FileReader(fileName)); } private static String readHeader(BufferedReader input) throws IOException { return input.readLine(); } private static void parseRow(String row, Map<String, Integer> highScores) throws IOException { String[] columns = row.split(","); highScores.put(columns[0], Integer.valueOf(columns[1])); } }
Now, let’s say that we’ve got the following CSV file, as produced in the post about writing to text files:
$> cat highscores.csv #name,points user1,757 user2,482 user3,155 user4,269 user5,31 newUser,680
Now, when we run the above program it will print the following content, read from highscores.csv file:
File header: #name,points Read high scores: {user1=757, user2=482, user3=155, user4=269, user5=31, newUser=680}
In the next posts we’ll look at how to work with binary data using Java!