How can I read a large text file line by line using Java?
A common pattern is to use
try (BufferedReader br = new BufferedReader(new FileReader(file))) { String line; while ((line = br.readLine()) != null) { // process the line. }}
You can read the data faster if you assume there is no character encoding. e.g. ASCII-7 but it won't make much difference. It is highly likely that what you do with the data will take much longer.
EDIT: A less common pattern to use which avoids the scope of line
leaking.
try(BufferedReader br = new BufferedReader(new FileReader(file))) { for(String line; (line = br.readLine()) != null; ) { // process the line. } // line is not visible here.}
UPDATE: In Java 8 you can do
try (Stream<String> stream = Files.lines(Paths.get(fileName))) { stream.forEach(System.out::println);}
NOTE: You have to place the Stream in a try-with-resource block to ensure the #close method is called on it, otherwise the underlying file handle is never closed until GC does it much later.
Look at this blog:
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
// Open the fileFileInputStream fstream = new FileInputStream("textfile.txt");BufferedReader br = new BufferedReader(new InputStreamReader(fstream));String strLine;//Read File Line By Linewhile ((strLine = br.readLine()) != null) { // Print the content on the console System.out.println (strLine);}//Close the input streamfstream.close();
Once Java 8 is out (March 2014) you'll be able to use streams:
try (Stream<String> lines = Files.lines(Paths.get(filename), Charset.defaultCharset())) { lines.forEachOrdered(line -> process(line));}
Printing all the lines in the file:
try (Stream<String> lines = Files.lines(file, Charset.defaultCharset())) { lines.forEachOrdered(System.out::println);}