import java.util.Scanner; import java.io.*; public class Test { public void guardar(Persona [] p) { FileWriter fichero = null; PrintWriter pw = null; try { fichero = new FileWriter("./personas.csv"); pw = new PrintWriter(fichero); for(int i = 0; i < p.length; i++) { // Ignoramos las posiciones que sean null. if(p[i] != null) { // Como en este caso se trata de objetos Persona, // debemos separar la informacion de alguna forma. // En primer lugar, guardamos la posicion del objeto // dentro del arreglo, luego su nombre, despues su // apellido y por ultimo su edad. Todo esto separado // por comas. pw.println(i + "," + p[i].getNombre() + "," + p[i].getApellidos() + "," + p[i].getEdad()); } } } catch (Exception e) { e.printStackTrace(); } finally { try { // Nuevamente aprovechamos el finally para // asegurarnos que se cierra el fichero. if (null != fichero) fichero.close(); } catch (Exception e2) { e2.printStackTrace(); } } } public void cargar(Persona [] p) { File archivo = null; FileReader fr = null; BufferedReader br = null; try { // Apertura del fichero y creacion de BufferedReader para poder // hacer una lectura comoda (disponer del metodo readLine()). archivo = new File ("./personas.csv"); fr = new FileReader (archivo); br = new BufferedReader(fr); // Leemos la primera linea. String linea = br.readLine(); // Debemos obtener la informacion de cada linea. String [] datos = null; // Indice de cada persona. int i = 0; // Mientras no lleguemos al final del archivo, seguimos trabajando. while(linea != null) { // Separamos la linea por cada coma y guardamos la info. en datos. datos = linea.split(","); // Convertimos el indice a un entero. i = Integer.parseInt(datos[0]); // Y guardamos a la persona en el indice que corresponde. // Tomamos el resto de los datos para crear a la persona. p[i] = new Persona(datos[1], datos[2], Integer.parseInt(datos[3])); // Pasamos a la segunda linea. linea = br.readLine(); } } catch(Exception e) { e.printStackTrace(); } finally { // En el finally cerramos el fichero, para asegurarnos // que se cierra tanto si todo va bien como si salta // una excepcion. try { if( null != fr ) { fr.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } // Limpia la pantalla usando lineas en blanco public void limpiar() { for (int i = 0; i < 30; i++) System.out.println(""); } // Visualiza el menu public void visualizaMenu() { System.out.println("Menu"); System.out.println(""); System.out.println("1) Agregar"); System.out.println("2) Modificar"); System.out.println("3) Borrar"); System.out.println("4) Visualizar todos"); System.out.println("5) Guardar"); System.out.println("6) Cargar"); System.out.println("0) Salir"); } // Arreglo unidimensional ... public void arregloUnidimensionalLong() { // Arreglo unidimensional long[]Arr; // Tamano arreglo unidimensional int Tam; // objeto para trabajar con teclado Scanner teclado = new Scanner(System.in); // Pregunta sobre el tamaño del arrglo do { System.out.println("Tamaño del arreglo? "); Tam = teclado.nextInt(); if(Tam <= 0 || Tam > 10) System.out.println("Error en el tamaño, rango de 1 a 10"); } while(Tam <= 0 || Tam > 10); Arr = new long[Tam]; int op = 1, act = 0; // Menu do { // limpiar(); visualizaMenu(); System.out.println(""); System.out.println("Opcion: "); op = teclado.nextInt(); switch(op) { // Salir case 0: break; // Adicionar case 1: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || Tam >= Tam) System.out.println("Error en la posicion, rango de 0 a " + Tam); } while(act < 0 || act >= Tam); System.out.println("Valor? "); Arr[act] = teclado.nextInt(); break; // Modificar case 2: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || Tam >= Tam) System.out.println("Error en la posicion, rango de 0 a " + Tam); } while(act < 0 || act >= Tam); System.out.println("Valor actual: " + Arr[act]); System.out.println("Nuevo valor: "); Arr[act] = teclado.nextInt(); break; // Borrar case 3: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || Tam >= Tam) System.out.println("Error en la posicion, rango de 0 a " + Tam); } while(act < 0 || act >= Tam); Arr[act] = 0; break; // Visualizar case 4: for(act = 0; act < Tam; act++) System.out.println(act + "--> " + Arr[act]); break; default: System.out.println("Opcion no reconocidad"); } } while(op != 0); System.out.println("Fin del arreglo unidimensional"); } // Arreglo unidimensional ... public void arregloUnidimensionalDatoAbstracto() { // Arreglo unidimensional Persona [] Arr; // Tamano arreglo unidimensional int Tam; // objeto para trabajar con teclado Scanner teclado = new Scanner(System.in); // Pregunta sobre el tamaño del arrglo do { System.out.println("Tamaño del arreglo? "); Tam = teclado.nextInt(); if(Tam <= 0 || Tam > 10) { System.out.println("Error en el tamaño, rango de 1 a 10"); } } while(Tam <= 0 || Tam > 10); Arr = new Persona[Tam]; int op = 1, act = 0; String nombre, apellido; int edad; // Menu do { // limpiar(); visualizaMenu(); System.out.println(""); System.out.println("Opcion: "); op = teclado.nextInt(); switch(op) { // Salir case 0: break; // Adicionar case 1: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || act >= Tam) { System.out.println("Error en la posicion, rango de 0 a " + Tam); } } while(act < 0 || act >= Tam); System.out.println("Nombre(s)? "); teclado.skip("\n"); nombre = teclado.nextLine(); System.out.println("Apellidos? "); apellido = teclado.nextLine(); System.out.println("Edad? "); edad = teclado.nextInt(); Persona p = new Persona(nombre, apellido, edad); Arr[act] = p; break; // Modificar case 2: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || act >= Tam) System.out.println("Error en la posicion, rango de 0 a " + Tam); } while(act < 0 || act >= Tam); System.out.println("Valor actual: " + Arr[act]); System.out.println("Nuevo valor: "); teclado.skip("\n"); //Arr[act] = teclado.nextLine(); break; // Borrar case 3: do { System.out.println("Posicion? "); act = teclado.nextInt(); if(act < 0 || Tam >= Tam) System.out.println("Error en la posicion, rango de 0 a " + Tam); } while(act < 0 || act >= Tam); Arr[act] = null; break; // Visualizar case 4: for(act = 0; act < Tam; act++) { System.out.print(act + "--> "); if(Arr[act] == null) { System.out.println("null"); } else { Arr[act].visualiza(); } } break; case 5: guardar(Arr); break; case 6: cargar(Arr); break; default: System.out.println("Opcion no reconocida"); } } while(op != 0); System.out.println("Fin del arreglo unidimensional"); } // Funcion Principal .... public static void main(String[] args) { Test t = new Test(); // Falta hacer un menu para saber a cual acceso o a todos // Primero entra al de Long //t.arregloUnidimensionalLong(); // Despues al de dato abstracto (persona) t.arregloUnidimensionalDatoAbstracto(); } }