как BufferedReader отслеживает, какая строка была прочитана? - PullRequest
1 голос
/ 29 июля 2010

Я читаю строки из файла и считаю, что, прочитав все строки, я получаю исключение из-за условия цикла while.

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

... код ...

// 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 of members being accused
    Member member = new Member();
    member.setName(sAccuser);
    member.setM(iM);
    member.setAccused(saTheAccused);

    veteranMembers.add(member);
}

Внутри цикла for нужно будет прочитать несколько строк, поэтому, если будет прочитана последняя строка файла, то while попытается readLine(), и это не удастся, потому что весь файл прочитан. Так как же работает BufferedReader readLine() и как я могу безопасно выйти из цикла while?

Спасибо.

1 Ответ

2 голосов
/ 29 июля 2010

readLine() возвращает ноль в EOF, и вы пытаетесь вызвать trim() для нулевой ссылки.Переместите вызов на trim() внутри цикла, как в

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

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