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.
13
3
Debe tener una línea vacía en su archivo.
Es posible que desee envolver su parseInt llamadas en un "try" bloque:
O simplemente comprobar si hay cadenas vacías antes de analizar:
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 buclewhile
. (O hacerlo parte de un buclefor
).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í
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.