Дан файл, в котором построчно хранятся данные вида:
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;
Метод 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());
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется таблица, можно ли для него сделать вертикальный и горизонтальный скроллиг, но только для для данных, кроме (верхняя строка - названия...
возможно тупой вопрос но все такизапустил приложение (по этому туториалу) через maven