1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Duvida java] Ficheiros de objectos

Discussão em 'Programação' iniciada por nasic, 29 de Março de 2008. (Respostas: 5; Visualizações: 1353)

  1. nasic

    nasic Power Member

    Boas.
    Estou aqui com um problema espero que me possam ajudar:P
    É o seguinte: estou a guardar para um ficheiro objectos. Até aí tudo bem, mas dps quando os quero ler do ficheiro novamente é que tenho problemas.

    O código é o seguinte:
    Código:
    while (fr.available() != 0) {
    FileInputStream fr = new FileInputStream ("bla.conteudos");
    ObjectInputStream ois = new ObjectInputStream (fr);
    Utilizador ut = ois.readObject();
    }
    fr.close();
    ois.close();
    
    Não implementei o toString no objecto Utilizador.

    O erro que dá é este:
    Código:
    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to Utilizador
    Não percebo o porquê, pois no ficheiro tenho um objecto e não uma string
     
  2. rj.rodrigues

    rj.rodrigues Power Member

    Não consegue converter "ois.readObject()" para "Utilizador"
    Para isso funcionar teria k ser:
    Utilizador ut = (Utilizador)ois.readObject();

    mas não podes fazer cast's assim de qq maneira


    podes fazer o seguinte:

    crias um construtor no Utilizador com parametro de entrada um "object"
    e depois nesse construtor usas o object como quiseres.
    por ex:
    Se querias usar o object como String fazes:
    Código:
    public Utilizador(Object obj){
      if(obj instanceOf java.lang.Sring){ //verifica se obj é uma String
         String qqcoisa = (String)obj;
      }
    }


    e assim no teu programa fazias:

    Código:
    (...)
    Utilizador ut = new Utilizador(ois.readObject()); // em vez de "Utilizador ut = ois.readObject();"
    (...)
    Isto tudo depende do que queiras fazer do object resultante de "ois.readObject()"
     
  3. nasic

    nasic Power Member

    Já tinha o cast mas de facto como disseste não se pode fazer casts sem mais nem menos!
    O grande problema é que tava a gravar um "\n" no final e isso dava barraca dps ao converter.

    Mas com esse construtor já funca:D

    Mt agradecido

    Agora tenho outra dúvida:
    É possivel ir buscar um objecto (ao ficheiro) "editar" este, por exemplo mudar um campo qq, e gravar por cima?
    Ou devo apagar e escrever um novo? Se sim como faço isso?

    Mt obrigado
     
    Última edição pelo moderador: 30 de Março de 2008
  4. HardBody

    HardBody Power Member

    Boas, penso que a melhor solução para fazeres isso é mesmo copiares todos os objectos que tens no ficheiro para um vector de objectos, editas os objectos que queres e voltas a copiar esse vector para o ficheiro.

    Queres codigo exemplo para isso ou queres tentar por ti proprio?

    :beerchug:
     
  5. nasic

    nasic Power Member

    Não é preciso obrigado. Foi como pensei, mas poderia haver uma forma mais directa:P
    Obrigado entao
     
    Última edição: 29 de Março de 2008
  6. nasic

    nasic Power Member

    Outra dúvida:
    Tenho uma ObjectInputStream a correr que faz comunicação com o cliente.
    ObjectInputStream in = new ObjectInputStream (cli.getInputStream());

    Mas agora precisava de criar outra ObjectInputStream para ler de um ficheiro para carregar os objectos guardados neste.
    ObjectInputStream ois = new ObjectInputStream (fis); (fis - FileInputStream);

    O problema é que dá-me uma expecção:
    java.io.StreamCorruptedException
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)

    Alguem sabe como resolver?
    Mt obrigado
     

Partilhar esta Página