Проверьте, как заканчивается ваш файл. Scanner
достаточно умен, чтобы отбросить единственный перенос строки с конца. Однако, если после этого будет что-то (например, пробел или другой разрыв строки), это будет новая строка для чтения. В таких случаях
String descritpion = scan.nextLine();
будет читать строку empty-i sh, а затем
String []temp = descritpion.split(":");
разбивает ее на одну -item массив, где
String name = temp[0];
содержит всю строку (пустую или содержащую один пробел или что-то еще), вот как он проходит но
String surname = temp[1];
не существует, и поэтому выдает исключение. Однако в таких случаях line
должно появиться на экране перед исключением. См. Тест (со строками вместо файлов) здесь: https://ideone.com/ixo0kd - случаи без разрыва строки и одиночный разрыв строки работают нормально, пробел после разрыва строки и двойная линия -break случаев вызывает исключение, но перед этим отображается пустое line
.