Leitura de um Objeto em um arquivo

9 respostas
L

Tenho um objeto tipo lista
Lista L = new Lista();

blz… passo pro arquivo assim

FileWriter writer = new FileWriter(hosts);

PrintWriter W = new PrintWriter(writer);

W.println(L);

ok… ateh ai blz…

mas naum consigo ler esse objeto do arquivo to lendo assim

FileReader Reader = new FileReader(hosts);

BufferedReader R = new BufferedReader(Reader);
R.???; sei la

vlwwws!

9 Respostas

Luca

Olá

  • Aprenda um pouco sobre serialização

  • use java.io.ObjectInputStream e java.io.ObjectOutputStream

[]s
Luca

gwoliveira

O segredo é a serialização e aproveitando pra vender o peixe de um amigo da uma olhada sobre o prevayler, acredito que ele resolva seus problemas em recuperar os objetos, mas cuidado altamente viciante rs
:stuck_out_tongue:

[]s

L

BLZZZZ!! funciono! vlww :smiley: :smiley:

agora to um otro problema…
como eu leio o proximo do arquivo, soh consigo ler o primeiro.

vlw dnovo

Y

Cara, seu eu não me engano a cada chamada que tu fazes ao readObject é retornado um objeto.

Tipo assim:

Object obj1 = input.readObject();
Object obj2 = input.readObject();
L

certo…
ja tinha feito isso… ele sempre le o primero objeto, mas qdo vai ler o segundo ele da essa exceção

java.io.StreamCorruptedException

EDIT:mais exatamente essa: java.io.StreamCorruptedException: invalid type code: AC

vlww

L

consegui… resolvi da seguinte forma

qdo vc faz um .writeObject((Object)) ele salva um cabeçalho e dpois as informações…

intaum, se vc le apenas com o .readObject(), ele vai ler apena a primeira linha e não vai reconhecer o proximo item, reconheceria eu conseguisse passar (naum sei como) um objeto com varias “Listas” ao inves de varios objetos de listas…

sendo assim, para cada reader.readObject() é necessario que o reader receba um new new ObjectInputStream(“asda.ser”);

vlw pelas ajudas… essa foi a solucao q eu encontrei… ainda estou aberto a solucoes melhores… vlw dnovo

D

Olá… eu também estou enfrentando o mesmo problema com a leitura de objetos. Só consigo ler os objetos gravados quando o arquivo foi criado. Depois disto, a leitura gera uma exceção.
Você poderia detalhar melhor a sua solução?
Obrigaa.

caueda
//Para criar este tal objeto com várias listas (DTO - Data Transfer Object ou VO Value Object)
//Digamos que você queira serializar uma lista de faturas e uma lista de beneficiários.
//Primeiro vamos aos nossos objetos Fatura e Beneficiario:

public class Beneficiario implements Serializable
{
  private static final long serialVersionUID = 7526471155622776147L;
  public String nome;
  public Beneficiario()
  {
  }
  public Beneficiario(String nome)
  {
    this.nome = nome;
  }
  public String toString()
  {
    return nome;
  }
}

public class Fatura implements Serializable
{
  private static final long serialVersionUID = 7526471155622776147L;
  public double valor;  
    
  public Fatura()
  {
  }
  public Fatura(double valor)
  {
    this.valor = valor;
  }
  public String toString()
  {
    return "" + valor;
  }
}

//Agora vamos ao nosso objeto DTO que irá guardar as nossas listas de Fatura's e Beneficiario's

public class ObjetoDTO implements Serializable
{
  private static final long serialVersionUID = 7526471155622776147L;
  public List faturas;
  public List beneficiarios;
  public ObjetoDTO()
  {
    
  }
  public ObjetoDTO(List faturas, List beneficiarios)
  {
    this.faturas = faturas;
    this.beneficiarios = beneficiarios;
  }
  
  public static void main(String[] args)
  {
    FileOutputStream fs = null;    
    ObjectOutputStream os = null;
    
    // Crio as listas de Fatura e Beneficiario
    List beneficiarios = Arrays.asList(new Beneficiario("José"), new Beneficiario("Maria"));
    List faturas = Arrays.asList(new Fatura(150.0), new Fatura(200.0));

    //Crio o DTO com estas listas
    ObjetoDTO dto = new ObjetoDTO(faturas, beneficiarios);
    try
    {     
      //Serialização 
      fs = new FileOutputStream("c:/serializacao.txt");
      os = new ObjectOutputStream(fs); 
      os.writeObject(dto);
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      try
      {
        if (os != null)
          os.close();
        if (fs != null)
          fs.close();
      }
      catch (IOException e)
      {
        e.printStackTrace();
      }
    }
    
    //Deserialização
    FileInputStream fi = null;
    ObjectInputStream oi = null;
    
    try
    {
      fi = new FileInputStream("c:/serializacao.txt");      
      oi = new ObjectInputStream(fi);
      
      ObjetoDTO obj = (ObjetoDTO) oi.readObject();
      System.out.println(obj.faturas);
      System.out.println(obj.beneficiarios);
    }
    catch(ClassNotFoundException e)
    {
      e.printStackTrace();
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      try
      {
        if(oi != null) fi.close();
        if(oi != null) oi.close();
      }
      catch(IOException e)
      {        
      }
    }
  }
}
condesales

Resolvi meu problema exatamente com a solução que o lsr colocou.
Para cada novo objeto que você vai ler, é preciso um novo ObjectInputStream

Valeu! :smiley:

Criado 23 de abril de 2007
Ultima resposta 5 de nov. de 2009
Respostas 9
Participantes 7