Сканер - Исключение в потоке "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 перечисления, чтобы указать, что в перечислении больше нет элементов.