Java NoSuchElementException using scanner.nextInt()

Posted by othnin on Stack Overflow See other posts from Stack Overflow or by othnin
Published on 2011-11-16T01:46:41Z Indexed on 2011/11/16 1:50 UTC
Read the original article Hit count: 246

Filed under:
|

I am trying to read in a pgm file (512x512 array) and when I read in a larger file I get the error: java.util.NoSuchElementException on reading element (3,97).

I have created a much smaller file to read (23x23) and it reads fine. Is there a size limit? I have checked the file and confirmed that there is an int for the value: This appears to be the line it crashes at:

fileArray[row][col] = scan.nextInt();

Here is the file:

import java.util.Scanner;
import java.io.*;

public class FileReader

{
public static void main(String[] args) throws IOException

{

        String fileName = "lena.pgma";
        int width, height, maxValue;
    FileInputStream fileInputStream = null;

    fileInputStream = new FileInputStream(fileName);
    Scanner scan = new Scanner(fileInputStream);
    // Discard the magic number
    scan.nextLine();
    // Discard the comment line
    scan.nextLine();
    // Read pic width, height and max value
    width = scan.nextInt();
    System.out.println("Width: " + width);

    height = scan.nextInt();
    System.out.println("Heigth: " + height);
    maxValue = scan.nextInt();

    fileInputStream.close();

     // Now parse the file as binary data
     FileInputStream fin = new FileInputStream(fileName);
     DataInputStream dis = new DataInputStream(fin);

     // look for 4 lines (i.e.: the header) and discard them
     int numnewlines = 4;
     while (numnewlines > 0) {
         char c;
         do {
             c = (char)(dis.readUnsignedByte());
         } while (c != '\n');
         numnewlines--;
     }

     // read the image data
     int[][] fileArray = new int[height][width];

     for (int row = 0; row < height; row++) {
         for (int col = 0; col < width; col++) {

             fileArray[row][col] = scan.nextInt();
             System.out.print("(" + row + " ," + col +"): " + fileArray[row][col]+ " ");

         }

         System.out.println();
     }
     dis.close();


}

}

any advise would be appreciated.

© Stack Overflow or respective owner

Related posts about java

Related posts about scanner