Search code examples
javafile-iolzw

Scanner - Exception in thread "main" java.util.NoSuchElementException: No line found


There is definitely a line but I don't understand why cant the Scanner see it ..

Here is the beginning of the file :

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

Below is my code for getting it:

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

But I am getting the error:

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

The file book1_enc is an output of my LZW encoding algorithm.When I am passing the file to my Decoder I would like the decoder to know the size of dictionary which is 256 in this case...Thanks for reading...


Solution

  • The problem is with the encoding of the input file. Use the other constructor for Scanner that specifies a character set:

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

    Using other constructors results in the default character set being used which typically cannot correctly read unicode characters.

    Workaround:

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