开发者

how does BufferedReader keep track of what line has been read?

开发者 https://www.devze.com 2023-01-09 20:32 出处:网络
I\'m reading lines from a file, and I believe that once I\'ve read all the lines, I get an exception because of my while loop condition.

I'm reading lines from a file, and I believe that once I've read all the lines, I get an exception because of my while loop condition.

Exception in thread "main" java.lang.NullPointerException
    at liarliar.main(liarliar.java:79)

... the code...

// read the first line of the file
iNumMembers = Integer.parseInt(br.readLine().trim()); 

// read file
while ((sLine = br.readLine().trim()) != null) {

    // extract the name and value 'm'
    String[] split = sLine.split("\\s+");
    sAccuser = split[0];
    iM = Integer.parseInt(split[1]);
    saTheAccused = new String[iM];

    for (int i = 0; i < iM; i++) {
        saTheAccused[i] = br.readLine().trim();
    }

    // create member
    // initialize name and number o开发者_运维问答f members being accused
    Member member = new Member();
    member.setName(sAccuser);
    member.setM(iM);
    member.setAccused(saTheAccused);

    veteranMembers.add(member);
}

The for loop inside will have to read several lines so if the last line of the file is read, then the while will try to readLine() and that will fail because the whole file has been read. So how does the BufferedReader readLine() work and how can I safely exit my while loop?

Thanks.


readLine() returns null on EOF, and you are trying to call trim() on a null reference. Move the call to trim() inside the loop, as in

// read file
while ((sLine = br.readLine()) != null) {

    // extract the name and value 'm'
    String[] split = sLine.trim().split("\\s+");
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号