Java - guardar archivo en arraylist

 
Vista:
Imágen de perfil de Charly
Val: 178
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

guardar archivo en arraylist

Publicado por Charly (118 intervenciones) el 11/02/2017 16:54:53
Hola, tengo un archivo con estos objetos (Alumnos.txt):
1,Carlos,Utrilla,39,Rosales,16,50008
2,Pepe,Perez,2,Calle,2,123
Y tengo un metodo para leer los objetos alumnos del archivo para meterlos en un arraylist:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private void llenar_array_de_fichero(){
		Scanner s=null;
		try{
			s=new Scanner("alumnos.txt"); //Leo el contenido del fichero
			while(s.hasNextLine()){ //Obtengo los datos de los alumnos del fichero
				String linea=s.nextLine(); // Obtengo una linea del fichero (un alumno)
				String [] cortarString=linea.split(","); // Obtengo los datos del alumno
				Alumno alumno=new Alumno(); // Creo un objeto de la clase "Alumno"
				alumno.setClave(cortarString[0]); // Pongo los atributos al objeto "alumno"
				alumno.setNombre(cortarString[1]);
				alumno.setApellidos(cortarString[2]);
				alumno.setEdad(cortarString[3]);
				alumno.getDireccion().setCalle(cortarString[4]);
				alumno.getDireccion().setNumero(cortarString[5]);
				alumno.getDireccion().setCodPostal(cortarString[6]);
				alumnos.add(alumno); // Añado el objeto "alumno" al ArrayList
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(s!=null){
					s.close();
				}
			}catch(Exception e2){
				e2.printStackTrace();
			}
		}
		System.out.println("... Guardados "+alumnos.size()+" alumnos  ...");
	}
El problema es que en la línea que pone: alumno.setNombre(cortarString[1]); me pone el siguiente error:
java.lang.ArrayIndexOutOfBoundsException: 1
at gestorAlumnos.llenar_array_de_fichero(gestorAlumnos.java:371)
at gestorAlumnos.<init>(gestorAlumnos.java:51)
at TestGestorAlumnos.main(TestGestorAlumnos.java:3)
... Guardados 0 alumnos ...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

guardar archivo en arraylist

Publicado por Thanatos (97 intervenciones) el 12/02/2017 09:52:03
Importa estas dos clases:
1
2
import java.nio.file.Path;
import java.nio.file.Paths;

Luego, cambia la primera línea que está dentro del try, por estas dos lineas:
1
2
Path rutaArchivo = Paths.get(".", "alumnos.txt");
sc = new Scanner(rutaArchivo);

En el primer argumento del método Paths.get() puedes colocar la ruta del directorio en el que se encuentra el archivo.

Si el archivo y la clase que lo utiliza se encuentran en el mismo directorio (que es lo que parece, por el argumento que le pasaste al Scanner en tu código), será suficiente escribir un punto, como en el ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 178
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

guardar archivo en arraylist

Publicado por Charly (118 intervenciones) el 12/02/2017 12:41:45
Gracias Thanatos por la respuesta.
Se ha arreglado en parte ya que no me da el error en esa línea, pero sí en la que intenta guardar la calle: alumno.getDireccion().setCalle(cortarString[4]);
Creo que el fallo lo tengo al intentar conseguir la calle, ya que Direccion es una clase diferente que la llamo desde Alumno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

guardar archivo en arraylist

Publicado por Thanatos (97 intervenciones) el 12/02/2017 15:14:53
Para que esa parte del código funcione como está escrita, las clases Alumno y Direccion deberían estar definidas de una de estas dos maneras:

Sin constructores explícitos. En otras palabras deberían estar utilizando el constructor que Java le asigna por defecto a las clases.

Si tienen uno o más constructores explícitos, también deberían tener un constructor sin parámetros.

En el segundo caso, podrías crear la instancia de la clase Direccion al momento de declararla como atributo de la clase Alumno. Otra opción, sería crear la instancia dentro del constructor sin parámetros, de la clase Alumno. Por ejemplo:
1
2
3
4
5
6
7
8
9
public class Direccion {
    /* Campos o atributos */
 
    public Direccion() { }  // Constructor sin parámetros.
 
    /* Otros constructores */
 
    /* Getters y setters. */
}

1
2
3
4
5
6
7
8
9
10
11
12
public class Alumno() {
    /* Otros campos o atributos */
    private Direccion direccion;
 
    public Alumno() {       // Constructor sin parámetros. 
        direccion = new Direccion();
    }
 
    /* Otros constructores */
 
    /* Getters y setters. */
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Charly
Val: 178
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

guardar archivo en arraylist

Publicado por Charly (118 intervenciones) el 12/02/2017 15:42:26
Pues muchas gracias, Thanatos.
Parece mentira que la solución fuera tan fácil, pero ha funcionado.
Yo me liaba con el parámetro dirección en Alumno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar