NPE при попытке reader.readLine;

179
02 августа 2018, 22:40

Дан файл, в котором построчно хранятся данные вида:

id name1 name2 name3.

Файл отсортирован по возрастанию по id. Мне нужен максимальный id.

Чтобы не перебирать все строки, решил схитрить и написал так (оставил только важное):

BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
skipLines(fileReader);
id = Integer.parseInt(fileReader.readLine().substring(0, idMaxLength).trim());

...

public static void skipLines(BufferedReader reader) {
    int count = (int) reader.lines().count();
    for (int i = 0; i < count - 1; i++) {
        try {
            reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

чтобы работать сразу с последней строкой. Но имею NPE на строке "id = Integer.parseInt..."

UPD: В отладке цикл нормально отрабатывает. Файл заполнен. Строка 100+ символов, idMaxLength != 0;

Answer 1

Метод lines в BufferedReader возвращает поток (stream) из строк файла. Чтение происходит "лениво": когда понадобится в конечной операции ("terminal stream operation"). Такой операцией является метод count, и в результате его применения из reader-а считываются все строки.

В итоге что в skipLines метод readLine возвращает count - 1 раз null (так как все строки уже считаны), что в основном коде (по той же самой причине).

Достаточно просто считывать строки до тех пор, пока не дойдёте до null, и возвращать последнюю не null-овую строку:

String lastLine = "";
String line;
while ((line = fileReader.readLine()) != null) 
{
    lastLine = line;
}
id = Integer.parseInt(lastLine.substring(0, idMaxLength).trim());
READ ALSO
Проблема с Mockito тестированием

Проблема с Mockito тестированием

Есть класс (HttpServletRequest - интерфейс)

183
Android скроллинг данных таблицы

Android скроллинг данных таблицы

Имеется таблица, можно ли для него сделать вертикальный и горизонтальный скроллиг, но только для для данных, кроме (верхняя строка - названия...

287
как остановить сервер запущенный через maven java

как остановить сервер запущенный через maven java

возможно тупой вопрос но все такизапустил приложение (по этому туториалу) через maven

184