El fichero contiene lo siguiente:
3
3
0 2 2
1 1 2
2 3 2
3 1 4
4 2 2
5 3 4
6 1 4
7 1 2
8 3 3
9 1 4
Quería almacenar todo esto en: int Numeros[];
He probado a leer el fichero caracter por caracter y me lo lee bien, haciendo uso de la clase fileread, para que lo imprima bien hago:
int caract = fr.read();
//Se recorre el fichero hasta encontrar el carácter -1
// que marca el final del fichero
while(caract != -1)
{
//Mostrar en pantalla el carácter leído convertido a char
System.out.print((char)caract);
caract = fr.read();
}
Si no hago la conversion a tipo caracter, no me visualiza bien los numeros(me muestra otros numeros distintos), descarte esa opcion y probé con otro código, esta vez usando las clases FileInputStream, DataInputStream, BufferedReader y StringTokenizer. Ahora me pone null al ejecutar el siguiente codigo:
while ((strLinea = buffer.readLine()) != null) {
StringTokenizer st = new StringTokenizer(strLinea, "\t");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
Numeros[cont]=Integer.parseInt(st.nextToken());
cont++;
}
}
¿cual es la manera mas sencilla y efectiva de pasar mi fichero .txt a int Numeros[]?
Gracias.
Antes de insertar comprueba si es un número.
private static boolean isNumber(String value) {
try {
Integer.parseInt(value);
return true;
} catch(NumberFormatException e) {
return false;
}
}
if(isNumber(String.valueOf(st.nextToken()))) {
int num = Integer.parseInt(String.valueOf(st.nextToken()));
//guardar en array
}
Saludos.
Muchas gracias, muy ingenioso. Hay un pequeño problema, he puesto puntos de ruptura y la variable num, no coge ningún valor, debería cogerlo en la siguiente linea:
int num = Integer.parseInt(String.valueOf(st.nextToken()));
En cambio cuando pasa de esa linea sin coger ningún valor, va directamente a:
catch (Exception e){ //Catch de excepciones
System.err.println("Ocurrio un error: " + e.getMessage());
}
el error que da es: Ocurrio un error: null
¿el error podría deberse a que cada vez que se llama a st.nextToken, analiza el siguiente string?,
No se si me explico, si por ejemplo el string es "1 Hola que tal", La clase StringTokenizer la primera vez que llamas a st.nextToken te llama al método isNumber y como es un numero retorna verdadero, pero a la hora de pasar el valor 1 a num, se llama de nuevo a st.nextToken por lo que intenta pasar "hola" a la variable entera num.
private static void readFile() {
try {
FileReader file = new FileReader("Numbers.txt");
BufferedReader buffered = new BufferedReader(file);
String line;
while ((line = buffered.readLine())!=null) {
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
String value = tokenizer.nextToken();
if(isNumber(value)) {
int num = Integer.parseInt(value);
System.out.print("["+num+"]"+",");
//Guardar en arreglo.
}
}
}
} catch (FileNotFoundException fnfe){
fnfe.printStackTrace();
} catch (IOException ioe){
ioe.printStackTrace();
}
}
private static boolean isNumber(String value) {
if(value!=null && !value.trim().equals("")) {
try {
Integer.parseInt(value);
return true;
} catch(NumberFormatException e) {
return false;
}
} else {
return false;
}
}