Java: Lectura de enteros desde un fichero a un array

File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);

int [] tall = new int [100];

String s =in.readLine();

while(s!=null)
{
    int i = 0;
    tall[i] = Integer.parseInt(s); //this is line 19
    System.out.println(tall[i]);
    s = in.readLine();
}

in.close();

Estoy tratando de utilizar el archivo "Tall.txt" para escribir los enteros contenidos en ellos en la matriz llamada "tall". Lo hace hasta cierto punto, pero también cuando lo ejecuto, lanza la siguiente excepción (:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at BinarySok.main(BinarySok.java:19)

¿Por qué hace esto exactamente, y cómo lo quito? Tal y como yo lo veo, leo el fichero como cadenas, y luego lo convierto a ints, lo cual no es ilegal.

Debe tener una línea vacía en su archivo.

Es posible que desee envolver su parseInt llamadas en un "try" bloque:

try {
  tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
  continue;
}

O simplemente comprobar si hay cadenas vacías antes de analizar:

if (s.length() == 0) 
  continue;

Tenga en cuenta que al inicializar su variable de índice i dentro del bucle, siempre es 0. Deberías mover la declaración antes del bucle while. (O hacerlo parte de un bucle for).

Comentarios (1)

Parece que Java está intentando convertir una cadena vacía en un número. Tiene una línea vacía al final de la serie de números?

Probablemente podrías arreglar el código así

String s = in.readLine();
int i = 0;

while (s != null) {
    // Skip empty lines.
    s = s.trim();
    if (s.length() == 0) {
        continue;
    }

    tall[i] = Integer.parseInt(s); // This is line 19.
    System.out.println(tall[i]);
    s = in.readLine();
    i++;
}

in.close();
Comentarios (0)

Es posible que tengas confusiones entre los diferentes finales de línea. Un archivo Windows terminará cada línea con un retorno de carro y un salto de línea. Algunos programas en Unix leerán ese archivo como si tuviera una línea en blanco extra entre cada línea, porque verán el retorno de carro como un final de línea, y luego verán el salto de línea como otro final de línea.

Comentarios (1)