Сканер - Исключение в потоке "main" java.util.NoSuchElementException: строка не найдена

Есть определенно линия, но я не понимаю, почему Сканер не видит это..

Вот начало файла:

256
<Y 1874>
<A T. HARDY‡<T Madding Crowd(Peuœ‚978)”C i”P 51‡DESCRIPTION OF FMERÅAK -- AÄINCIºNT

Ниже приведен мой код для его получения:

File file = new File ("calgary/book1_enc");
Scanner first_line = new Scanner(file);
int size_st;
size_st = Integer.valueOf(first_line.nextLine());

Но я получаю ошибку:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at LZWDecoder.main(LZWDecoder.java:26)

Файл book1_enc является выводом моего алгоритма кодирования LZW. Когда я передаю файл в мой декодер, я бы хотел, чтобы декодер знал размер словаря, который в данном случае равен 256... Спасибо за чтение...

2 ответа

Решение

Проблема с кодировкой входного файла. Используйте другой конструктор для Scanner это определяет набор символов:

Scanner first_line = new Scanner(file, "UTF-8");

Использование других конструкторов приводит к использованию набора символов по умолчанию, который обычно не может правильно читать символы Юникода.

Временное решение:

BufferedReader br = new BufferedReader(new FileReader("book1_enc.dat"));
int sizeSt = Integer.parseInt(br.readLine());

Это означает, что в вашем файле нет следующей строки. Вы должны всегда проверять hasNextLine() перед вызовом nextLine. Вы должны изменить свой код следующим образом

if (first_line.hasNextLine()){
    size_st = Integer.valueOf(first_line.nextLine());
}

java.util.NoSuchElementException генерируется методом nextElement перечисления, чтобы указать, что в перечислении больше нет элементов.

Другие вопросы по тегам