扫描程序 - 线程“main”中的异常java.util.NoSuchElementException:找不到行

时间:2013-06-26 10:09:19

标签: java file-io lzw

肯定有一条线,但我不明白为什么扫描仪看不到它..

这是文件的开头:

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 个答案:

答案 0 :(得分:2)

问题在于输入文件的编码。使用指定字符集的Scanner other constructor

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

使用其他构造函数会导致使用默认字符集,这通常无法正确读取unicode字符。

解决方法:

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

答案 1 :(得分:0)

这意味着您的文件没有下一行。在调用 nextLine 之前,您应该始终检查 hasNextLine()。您应该像这样修改您的代码

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

java.util.NoSuchElementException 由枚举的 nextElement 方法抛出,表示枚举中没有更多元素。