Foro sobre Java SE > Guardar objetos en un fichero
Hola, yo soy muy novato en java, pero me parece que en el case 2, (repito soy novato),
estas haciendo un bucle infinito.
creo que tendría que ser algo más parecido a esto:
while((linea=br.readLine())!=null) // y aqui en vez de esto utilizar un ois.readObject()!=null
System.out.println(linea); //o persona en tu caso
}
De todas maneras no has dicho si el fallo está en el case 1, o 2,...
Saludos y suerte
Además del bucle infinito que te comenta bosquito, estás cerrando cada vez el stream y ya no lo vuelves a abrir, abres en modo append... no se, varias cosas... . Una corrección para que al menos funcione un poco:
public class Fichero_array implements Serializable {
private String nombre;
public static void main(String[] args) throws IOException, ClassNotFoundException {
Scanner teclado = new Scanner(System.in);
int opciones;
ArrayList<Fichero_array> persona = new ArrayList();
do {
System.out.println("");
System.out.println("***Menu***");
System.out.println("1. Escribir objeto en fichero");
System.out.println("2. Leer objetos desde fichero");
opciones = teclado.nextInt();
switch (opciones) {
case 1:
FileOutputStream fos = new FileOutputStream("datos.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("");
Fichero_array per = new Fichero_array();
System.out.println("Introduce un nombre");
teclado.nextLine();
per.nombre = teclado.nextLine();
persona.add(per);
oos.writeObject(persona);
oos.close();
break;
case 2:
FileInputStream fis = new FileInputStream("datos.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
//do {
persona = (ArrayList<Fichero_array>) ois.readObject();
for (Fichero_array dato : persona) {
System.out.println(dato.nombre);
}
ois.close();
fis.close();
//} while (true);
break;
}
} while (opciones != 666);
}
}
Un saludo
Muchas gracias a los dos, la verdad es que estoy un poco perdido en esto.
Hola amigos del foro!
estoy intentando crear un pequeño programa donde poder guardar varios objetos en un fichero para despues leerlos por pantalla, pero me es imposible ya que no soy capaz.
os explico un poco lo que deseo hacer:
tengo un menu con dos opciones: escribir en fichero y leer desde fichero
ademas tengo 1 atributo, que es nombre
si pulso la primera opcion del menu (escribir en fichero)
pedira por teclado el nombre y se guardara en el fichero
(esta accion se podra repetir cuantas veces queramos)
despues si pulso la opcion dos (leer archivos)
mostrara todos los objetos guardados
alguien me podría ayudar a corregir los errores?
Esto es lo que llevo hecho:
package fichero_array;
import java.util.*;
import java.io.*;
public class Fichero_array implements Serializable {
private String nombre;
public static void main(String[] args)throws IOException, ClassNotFoundException {
Scanner teclado=new Scanner(System.in);
int opciones;
ArrayList<Fichero_array> persona=new ArrayList();
FileOutputStream fos=new FileOutputStream("datos.txt",true);
ObjectOutputStream oos=new ObjectOutputStream(fos);
FileInputStream fis=new FileInputStream("datos.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
do
{
System.out.println("");
System.out.println("***Menu***");
System.out.println("1. Escribir objeto en fichero");
System.out.println("2. Leer objetos desde fichero");
opciones=teclado.nextInt();
switch(opciones)
{
case 1:
System.out.println("");
Fichero_array per=new Fichero_array();
System.out.println("Introduce un nombre");
teclado.nextLine();
per.nombre=teclado.nextLine();
persona.add(per);
oos.writeObject(persona);
oos.close();
break;
case 2:
try
{
do
{
persona=(ArrayList<Fichero_array>)ois.readObject();
System.out.println(persona);
ois.close();
}while(true);
}
catch(EOFException e)
{
}
break;
}
}
while(opciones!=666);
}
}
gracias y un saludo.