2013-06-26 4 views
2

Существует, безусловно, линия, но я не понимаю, почему не могу сканер видеть ..Scanner - Исключение в потоке «основной» 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

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

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

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

Обход:

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

Спасибо, но у меня все еще такая же ошибка :( – Anarkie

+0

Протестировано и работает здесь. Вы можете попробовать сохранить файл как в текстовом редакторе, таком как Eclipse или Notepad ++, который позволяет вам изменять кодировку. – Reimeus

+0

Открываю файл notepad ++ и первый 3 строки похожи на то, что я скопировал, я сохранил его как текстовый файл из Notepad ++ и все еще имел ту же ошибку, я создал текстовый файл и вставил первые 3 строки в этот новый текстовый файл, все еще имея ту же ошибку, с другой стороны, текстовый файл, который я сохранил как, не похож на Notepad ++, не имеет «\ n», все тексты склеиваются, как вы пытались? Можете ли вы прокомментировать или, может быть, отправить мне файл, который вы пробовали? – Anarkie

0

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

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

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

+3

Я думаю, что вы имели в виду 'hasNextLine()'? –

+0

@VaibhavRaj Я попробовал то, что вы сказали, прежде чем задавать вопрос, но когда мне это нравится, ни одна строка не проходит, но я хочу получить первую строку, и я знаю, что есть первая строка, в которую я вставил первые три строки моего файла, вы можете видеть в вопросе. – Anarkie