Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 18 Septiembre 2015, 23:31 pm



Título: Error con StringTokenizer
Publicado por: Baal_30 en 18 Septiembre 2015, 23:31 pm
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
  1. public static void abrirArchivo(){
  2.  
  3. File f1 = new File("."+SEPARATOR+"archivos"+SEPARATOR+"rol.csv");
  4.  
  5. String cadena = "";
  6. String[] elementos = new String[8];
  7. try{
  8. FileReader fr = new FileReader(f1);
  9.  
  10. while(br.readLine()!=null){
  11. cadena = br.readLine();
  12. StringTokenizer st = new StringTokenizer(cadena, ",");
  13.  
  14. int i = 0;
  15. while(st.hasMoreElements()){
  16. elementos[i] = (String)st.nextElement();
  17. i++;
  18. }
  19.  
  20. personajes.add(new Personaje(elementos[1], elementos[2], elementos[3], elementos[4],
  21. Integer.parseInt(elementos[5]), Integer.parseInt(elementos[6]), Integer.parseInt(elementos[7])));
  22. }
  23.  
  24. br.close();
  25. fr.close();
  26. }catch(Exception e){
  27. e.printStackTrace();
  28. }
  29.  
  30. }

Un abrazo.

EDITO: La linea del error es esta :
Código
  1. StringTokenizer st = new StringTokenizer(cadena, ",");


Título: Re: Error con StringTokenizer
Publicado por: 0roch1 en 19 Septiembre 2015, 01:43 am
Intenta así.
Hice unas pequeñas modificaciones a tu código.

Código
  1.         public void abrirArchivo(String archivo){
  2.  
  3. File f1 = new File(archivo);
  4.  
  5. if(f1.exists()) {
  6.  
  7. String cadena = "";
  8. StringTokenizer st = null;
  9. int tokenNumber = 0;
  10.  
  11. String[] elementos = new String[8];
  12.  
  13. try{
  14. FileReader fr = new FileReader(f1);
  15.  
  16. while((cadena = br.readLine()) != null){
  17.  
  18.                            st = new StringTokenizer(cadena, ",");
  19.  
  20.                            while(st.hasMoreElements()) {
  21.                            tokenNumber++;
  22.                            elementos[tokenNumber] = (String)st.nextElement();
  23.                        }
  24.                        tokenNumber = 0;
  25.  
  26.                        System.out.println(elementos[1]+"-"+elementos[2]+"-"+elementos[3]+"-"+elementos[4]+"-"+elementos[5]+"-"+elementos[6]+"-"+elementos[7]);
  27.  
  28. //personajes.add(new Personaje(elementos[1], elementos[2], elementos[3], elementos[4],
  29. //Integer.parseInt(elementos[5]), Integer.parseInt(elementos[6]), Integer.parseInt(elementos[7])));
  30. }
  31.  
  32. br.close();
  33. fr.close();
  34. }catch(Exception e){
  35. e.printStackTrace();
  36. }
  37. }else {
  38. System.out.println("No se encontro el archivo");
  39. }
  40.  
  41. }
  42.  


Título: Re: Error con StringTokenizer
Publicado por: Baal_30 en 19 Septiembre 2015, 12:48 pm
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 ;)