Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > ¿Como leer un Arreglo guardado dentro de un fichero binario?

Soy nuevo en la programación en java y he estado practicado en hacer programas simples de registro de información.
Mi problema es que cuando el programa se cierra la información se pierde así que he investigado sobre guardar objetos en este caso un arreglo en un archivo externo
No tengo muchos problemas al momento de guardar el arreglo pero al leerlo no se como hacerlo he leído ya varias pagina y en la mayoría recomiendan el uso de una BD, ¿en verdad esto es necesario?

Les dejo mi código

("Seguro que hay mil formas de hacerlo mas simple")

Clase Alumno


public class Alumno implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;
private String nombre;
private String edad;
private String telefono;
private String nCuenta;



public Alumno() {

}

public Alumno(String nombre, String edad, String telefono, String nCuenta) {
super();
this.nombre = nombre;
this.edad = edad;
this.telefono = telefono;
this.nCuenta = nCuenta;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getEdad() {
return edad;
}

public void setEdad(String edad) {
this.edad = edad;
}

public String getTelefono() {
return telefono;
}

public void setTelefono(String telefono) {
this.telefono = telefono;
}

public String getnCuenta() {
return nCuenta;
}

public void setnCuenta(String nCuenta) {
this.nCuenta = nCuenta;
}

}

Clase Empleado


public class Empleado implements Serializable{

/**
*
*/
private static final long serialVersionUID = 2L;
private String nombre;
private String edad;
private String telefono;
private String rfc;


public Empleado() {
super();
}


public Empleado(String nombre, String edad, String telefono, String rfc) {
super();
this.nombre = nombre;
this.edad = edad;
this.telefono = telefono;
this.rfc = rfc;
}


public String getNombre() {
return nombre;
}


public void setNombre(String nombre) {
this.nombre = nombre;
}


public String getEdad() {
return edad;
}


public void setEdad(String edad) {
this.edad = edad;
}


public String getTelefono() {
return telefono;
}


public void setTelefono(String telefono) {
this.telefono = telefono;
}


public String getRfc() {
return rfc;
}


public void setRfc(String rfc) {
this.rfc = rfc;
}


}

Clase Principal (o "main")


public class Principal {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);

int a = 0;
do {
//Menu principal
System.out.println("1° Registro de Alumno");
System.out.println("2° Registro de Empleado");
System.out.println("3° Mostrar Registros");
System.out.println("4° Salir ");
a = in.nextInt();
//
switch (a) {

//Registro de Alumnos
case 1:
Alumno usuarioA[] = new Alumno[4];
int cont = 0;
Scanner en = new Scanner(System.in);

System.out.println("Ingrese Nombre del Aumno: ");
String w = en.nextLine();
System.out.println("Ingrese la Edad: ");
String x = en.nextLine();
System.out.println("Ingrese el Telefono: ");
String y = en.nextLine();
System.out.println("Ingrese el Numero de Cuenta: ");
String z = en.nextLine();

Alumno temp = new Alumno();

temp.setNombre(w);
temp.setEdad(x);
temp.setTelefono(y);
temp.setnCuenta(z);

usuarioA[cont] = temp;
cont++;

//aqui se guarda el arreglo usuarioA en un archivo "datos.A"

try {
File f = new File(System.getProperty("user.dir")
+ "/dat/datos.A");
FileOutputStream fw = new FileOutputStream(f, true);
ObjectOutputStream es = new ObjectOutputStream(fw);

Object datosA = "";

for (int i = 0; i < cont; i++) {

datosA += usuarioA[i].getNombre() + " "
+ usuarioA[i].getEdad() + " "
+ usuarioA[i].getTelefono() + " "
+ usuarioA[i].getnCuenta();

}
System.out.println(datosA);
es.writeObject(datosA);
es.close();
fw.close();

} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}


break;
//Registro de Empleados
case 2:

Empleado usuarioE[] = new Empleado[4];
int conta = 0;
Scanner ent = new Scanner(System.in);

System.out.println("Ingrese Nombre del Empleado: ");
String wE = ent.nextLine();
System.out.println("Ingrese la Edad: ");
String xE = ent.nextLine();
System.out.println("Ingrese el Telefono: ");
String yE = ent.nextLine();
System.out.println("Ingrese el Numero de RFC: ");
String zE = ent.nextLine();

Empleado tempE = new Empleado();

tempE.setNombre(wE);
tempE.setEdad(xE);
tempE.setTelefono(yE);
tempE.setRfc(zE);

usuarioE[conta] = tempE;
conta++;
//Se guarda el Arreglos usuarioE en "datos.E"
try {
File f = new File(System.getProperty("user.dir")
+ "/dat/datos.E");
FileOutputStream fw = new FileOutputStream(f, true);
ObjectOutputStream es = new ObjectOutputStream(fw);

Object datosA = "";

for (int i = 0; i < conta; i++) {

datosA += usuarioE[i].getNombre() + " "
+ usuarioE[i].getEdad() + " "
+ usuarioE[i].getTelefono() + " "
+ usuarioE[i].getRfc();

}
System.out.println(datosA);
es.writeObject(datosA);
es.close();
fw.close();

} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}

break;

//Mostrara la informacion de los Arreglos
case 3:
int b=0;

do {
Scanner sca=new Scanner(System.in);

//Menu secundario para Mostrar los arreglos

System.out.println("1° Registro de Alumnos");
System.out.println("2° Registro de Empleados");
b=sca.nextInt();
switch (b) {

//Mostrara Arreglo (datos.A) de alumnos
case 1:

try{
File f=new File(System.getProperty("user.dir")+"/dat/datos.A");

FileInputStream fw=new FileInputStream(f);

ObjectInputStream es=new ObjectInputStream(fw);



}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
catch(IOException ex){

ex.printStackTrace();
}
catch(ClassNotFoundException ex){

ex.printStackTrace();
}
break;

//Mostrara Arreglo (datos.E) de Empleados
case 2:
break;

case 3:
break;

default:
break;
}

} while (b !=3);

break;
case 4:
break;

default:
break;
}

} while (a != 4);

}

}

En verdad espero puedan ayudarme y desde ahora Gracias.

junio 14, 2014 | Registered Commenternocbleck

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.logging.Level;
import java.util.logging.Logger;

public class NewMain {

public static void main(String[] args) {

Prueba[] pruebas1 = new Prueba[3];
pruebas1[0] = new Prueba("prueba0", 0);
pruebas1[1] = new Prueba("prueba1", 1);
pruebas1[2] = new Prueba("prueba2", 2);

try {
ObjectOutputStream outputStream = new ObjectOutputStream(Files.newOutputStream(Paths.get(System.getProperty("user.dir"), "pruebas.dat")));
outputStream.writeObject(pruebas1);
outputStream.close();
} catch (IOException ex) {
Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
}

try {
ObjectInputStream inputStream = new ObjectInputStream(Files.newInputStream(Paths.get(System.getProperty("user.dir"), "pruebas.dat")));
Prueba[] pruebas2 = (Prueba[]) inputStream.readObject();
for (Prueba prueba2 : pruebas2) {
System.out.println("");
System.out.println(prueba2.getCadena());
System.out.println(prueba2.getNumero());
}
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
}

}

private static class Prueba implements Serializable {

private final String cadena;
private final int numero;

Prueba(String cadena, int numero) {
this.cadena = cadena;
this.numero = numero;
}

/**
@return the cadena
*/
public String getCadena() {
return cadena;
}

/**
@return the numero
*/
public int getNumero() {
return numero;
}
}
}

junio 15, 2014 | Registered Commenterchoces

Muchas Gracias me ayudo el ejemplo

a partir de aquí ya pude terminar mi programa

Gracias de nuevo

junio 19, 2014 | Registered Commenternocbleck