Olá pessoal!
Estou dando um fuçada em como funciona o ObjectInputStream e o ObjectOutputStream para gravar em um arquivo um determinado objeto serializável.
Consegui criar o tal arquivo, só que não faço idéia de como farei para “appendar” outras entradas (objetos serializados) nesse mesmo arquivo.
Vou postar aqui as classes que estou utilizando:
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Pet implements Serializable {
private String name;
private String owner;
private Date birth;
private Date death;
public Pet(String name, String owner) {
this.name = name;
this.owner = owner;
}
public Pet(String name, String owner, Date birth, Date death) {
this.name = name;
this.owner = owner;
this.birth = birth;
this.death = death;
}
//getters e setters
public String toString(){
StringBuilder sb = new StringBuilder("");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sb.append(name);
if(owner != null)
sb.append(", owned by " + owner);
sb.append(".");
if(birth != null) {
sb.append(" Born in " + sdf.format(birth));
}
if(death != null) {
if(birth != null)
sb.append(" and died in");
else
sb.append(" Died in");
sb.append(" " + sdf.format(death));
}
if(birth != null || death != null)
sb.append(".");
return sb.toString();
}
}
import br.com.autbank.tech.util.time.Pause;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void writeBin(File file, Serializable ser)
throws IOException
{
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(ser);
oos.close();
fos.close();
}
public static Serializable readBin(File file)
throws IOException,
ClassNotFoundException
{
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Serializable result = (Serializable) ois.readObject();
return result;
}
public static Date getDate(int day, int month, int year) {
Calendar c = Calendar.getInstance();
c.setLenient(false);
c.set(year, month - 1, day);
return c.getTime();
}
public static void main(String[] args)
throws IOException,
ClassNotFoundException
{
Pet myPet = new Pet(
"Budino",
"Mantu",
getDate(10, 05, 1986),
getDate(24, 12, 1999)
);
File file = new File(System.getProperty("java.io.tmpdir"), "pets.pet");
if(file.exists())
file.delete();
if(file.createNewFile()) {
writeBin(file, myPet);
System.out.println("File created in " + file.getParent());
Pause.zzz(1000);
myPet = (Pet)readBin(file);
System.out.println(
"Pet retrieved from " + file.getAbsolutePath() + ":\n\t" + myPet
);
}
else
throw new RuntimeException("File wasn't created");
}
}
Gostaria de saber como eu faço para inserir mais de um objeto Pet no meu arquivo, se é que isso é possível…
Obrigado, pessoal!