javabufferedreader

Using BufferedReader.readLine() in a while loop properly


So I'm having an issue reading a text file into my program. Here is the code:

try {
    InputStream fis = new FileInputStream(targetsFile);
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

    //while(br.readLine()!=null){
    for (int i = 0; i < 100; i++) {
        String[] words = br.readLine().split(" ");
        int targetX = Integer.parseInt(words[0]);
        int targetY = Integer.parseInt(words[1]);
        int targetW = Integer.parseInt(words[2]);
        int targetH = Integer.parseInt(words[3]);
        int targetHits = Integer.parseInt(words[4]);
        Target a = new Target(targetX, targetY, targetW, targetH, targetHits);
        targets.add(a);
    }
    br.close();
} catch (Exception e) {
    System.err.println("Error: Target File Cannot Be Read");
}

The file I am reading from is 100 lines of arguments. If I use a for loop it works perfectly. If I use the while statement (the one commented out above the for loop) it stops at 50. There is a possibility that a user can run the program with a file that has any number of lines, so my current for loop implementation won't work.

Why does the line while(br.readLine()!=null) stop at 50? I checked the text file and there is nothing that would hang it up.

I don't get any errors from the try-catch when I use the while loop so I am stumped. Anyone have any ideas?


Solution

  • You're calling br.readLine() a second time inside the loop.
    Therefore, you end up reading two lines each time you go around.