После того, как осталось больше элементов для чтения, вы Scannerполучите исключение, которое вы видите. Прямо сейчас вы продолжаете цикл, пока можете прочитать файл, но это не влияет на то, где Scannerнаходится файл. Scannerпредоставляет семейство функций , чтобы проверить правильность следующих лексем: hasNext(), hasNextInt(), hasNextLine()и т.д. Вы должны использовать их вместо того, чтобы :
while( input.hasNext() ) {
String code = input.next();
// ...
}
Однако, если у вас есть искаженный файл, вы по-прежнему можете получить исключение по аналогичным причинам, считая часы и титры. Вы можете обработать их, проверив сканер перед их чтением или, возможно, в обработчике исключений, поскольку это, вероятно, указывает на большую проблему, например, чтение неподдерживаемого или поврежденного файла.