Error con StringTokenizer

Iniciado por Baal_30, 18 Septiembre 2015, 23:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Baal_30

Muy buenas, a ver, estoy haciendo una función para guardar en objetos la información de un archivo. El archivo en cuestión es un CSV y en cada linea hay un personaje (excepto en la primera que están el nombre de las características), y voy creando objetos así (en el array no uso la posición 0 porque es el id que se creará automáticamente). Me he dado cuenta que crea uno sí, uno no, no todos. Y la defensa me pone sólo unidades y decenas no las centenas :/

Además de que me da este error :

java.lang.NullPointerException
   at java.util.StringTokenizer.<init>(Unknown Source)
   at java.util.StringTokenizer.<init>(Unknown Source)
   at Propuesta4.mainRol.abrirArchivo(mainRol.java:42)
   at Propuesta4.mainRol.main(mainRol.java:25)

El código es el siguiente :

Código (java) [Seleccionar]
public static void abrirArchivo(){

File f1 = new File("."+SEPARATOR+"archivos"+SEPARATOR+"rol.csv");

String cadena = "";
String[] elementos = new String[8];
try{
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);

while(br.readLine()!=null){
cadena = br.readLine();
StringTokenizer st = new StringTokenizer(cadena, ",");

int i = 0;
while(st.hasMoreElements()){
elementos[i] = (String)st.nextElement();
i++;
}

personajes.add(new Personaje(elementos[1], elementos[2], elementos[3], elementos[4],
Integer.parseInt(elementos[5]), Integer.parseInt(elementos[6]), Integer.parseInt(elementos[7])));
}

br.close();
fr.close();
}catch(Exception e){
e.printStackTrace();
}

}


Un abrazo.

EDITO: La linea del error es esta :
Código (java) [Seleccionar]
StringTokenizer st = new StringTokenizer(cadena, ",");
«La suerte es el cuidado de los detalles». -Winston Churchill

0roch1

Intenta así.
Hice unas pequeñas modificaciones a tu código.

Código (java) [Seleccionar]

         public void abrirArchivo(String archivo){

File f1 = new File(archivo);

if(f1.exists()) {

String cadena = "";
StringTokenizer st = null;
int tokenNumber = 0;

String[] elementos = new String[8];

try{
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);

while((cadena = br.readLine()) != null){

                            st = new StringTokenizer(cadena, ",");
               
                            while(st.hasMoreElements()) {
                            tokenNumber++;
                            elementos[tokenNumber] = (String)st.nextElement();
                        }
                        tokenNumber = 0;
               
                        System.out.println(elementos[1]+"-"+elementos[2]+"-"+elementos[3]+"-"+elementos[4]+"-"+elementos[5]+"-"+elementos[6]+"-"+elementos[7]);

//personajes.add(new Personaje(elementos[1], elementos[2], elementos[3], elementos[4],
//Integer.parseInt(elementos[5]), Integer.parseInt(elementos[6]), Integer.parseInt(elementos[7])));
}

br.close();
fr.close();
}catch(Exception e){
e.printStackTrace();
}
}else {
System.out.println("No se encontro el archivo");
}

}

Baal_30

Vale, el error estaba en el while, tenía que poner while((cadena = br.readLine())!=null), y yo lo tenía sin el "cadena =", porque quería que la primera no la leyera, pero claro, no pensé que cada vez que hiciera una itineración del while se saltaría una linea, y en la última antes de null, entraría, y al ponerle cadena = br.readLine() ya daría null y por eso el error :P

Gracias por la ayuda ;)
«La suerte es el cuidado de los detalles». -Winston Churchill