Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using BufferedReader to read Text File

Tags:

java

file

text

I'm having problems with using the BufferedReader

I want to print the 6 lines of a text file:

public class Reader {  public static void main(String[]args) throws IOException{      FileReader in = new FileReader("C:/test.txt");     BufferedReader br = new BufferedReader(in);      while (br.readLine() != null) {         System.out.println(br.readLine());     }     in.close();  } 

Now from what I can gather every time I call the readLine() method it automatically advances to the next line.

So I can't use the condition br.readLine() != null since it'll already advance it one line and I get the output:

Line 2 Line 4 Line 6 

What Condition do I use to check if there is still a new line in the text field.

Thanks in advance!

like image 478
Syntic Avatar asked Apr 19 '13 12:04

Syntic


People also ask

Why does Java use BufferedReader to read any file?

Why Should Developers Use the BufferedReader Class in Java? BufferedReader reduces the number of I/O operations that would otherwise be needed to read a piece of data by reading the data in chunks and then storing it in an internal buffer.

How does BufferedReader readline work?

Class BufferedReader. Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

What is BufferedReader in Java with example?

The BufferedReader class of Java is used to read the stream of characters from the specified source (character-input stream). The constructor of this class accepts an InputStream object as a parameter.


1 Answers

This is the problem:

while (br.readLine() != null) {     System.out.println(br.readLine()); } 

You've got two calls to readLine - the first only checks that there's a line (but reads it and throws it away) and the second reads the next line. You want:

String line; while ((line = br.readLine()) != null) {     System.out.println(line); } 

Now we're only calling readLine() once per loop iteration, and using the line that we've read both for the "have we finished?" and "print out the line" parts.

like image 182
Jon Skeet Avatar answered Sep 21 '22 07:09

Jon Skeet