Ler objectos de ficheiro e passar para vector

lilcrazy

Power Member
Boas. Gostaria que alguém me ajudasse nesta situação: estou a construir uma classe que contém dois métodos. Esses métodos fazem o seguinte: escrever num ficheiro de objectos todos os objectos contidos num Vector<Object> (passado como parâmetro); ler do ficheiro de objectos todos os objectos e colocá-los num Vector<Object>. A parte de escrita funciona bem, mas a leitura está a dar uma excepção na seguinte linha de código "vect = (Vector<Objectos>)obj.readObject();" O que estou a fazer de errado?

Aqui envio o código dos métodos de escrita e leitura:

//Escrita
Código:
synchronized static void FileWrite(String fileName, Vector<Objectos> vect){
      //ObjectInput input = null;
      ObjectOutput output = null;
      /*
      //lê o ficheiro para poder escrever sem incompatibilidade de dados
      try{
       final InputStream file = new FileInputStream(fileName);
       final InputStream buffer = new BufferedInputStream(file);
       input = new ObjectInputStream (buffer);
      }catch(final IOException e){
        System.out.println("Cannot perform input.");
      }
*/
         
      //escreve do Vector de objectos para um ficheiro
      try{
       final OutputStream file = new FileOutputStream(fileName);
       final OutputStream buffer = new BufferedOutputStream(file);
       output = new ObjectOutputStream(buffer);

       if(!vect.isEmpty()){
        for(int i = 0; i < vect.size(); i++){
         output.writeObject(vect.elementAt(i));
        }
       }
      }
      catch(final IOException e){ 
       System.out.println("Cannot perform output.");
      }
      finally{
       try{
        if(output != null){
         //flush and close "output" and its underlying streams
         output.close();
        }
       }
       catch(final IOException ex ){
        System.out.println("Cannot close output stream.");
       }
      }

     }


//Leitura
Código:
 synchronized static Vector<Objectos> FileRead(String fileName){

      Vector<Objectos> vect = new Vector<Objectos>();
      
      try{
       FileInputStream file = new FileInputStream(fileName);
       ObjectInputStream obj = new ObjectInputStream(file);
       
       try{
        vect = (Vector<Objectos>)obj.readObject();
        return vect;   
       }catch(ClassNotFoundException e){ 
         System.out.print("Erro!");
         return new Vector<Objectos>();
       }
      }catch(IOException e){ 
        System.out.print("Erro na leitura do ficheiro."); 
        return new Vector<Objectos>();
       }
 }
 
Boas. Gostaria que alguém me ajudasse nesta situação: estou a construir uma classe que contém dois métodos. Esses métodos fazem o seguinte: escrever num ficheiro de objectos todos os objectos contidos num Vector<Object> (passado como parâmetro); ler do ficheiro de objectos todos os objectos e colocá-los num Vector<Object>. A parte de escrita funciona bem, mas a leitura está a dar uma excepção na seguinte linha de código "vect = (Vector<Objectos>)obj.readObject();" O que estou a fazer de errado?

Aqui envio o código dos métodos de escrita e leitura:

a mim aquilo parece-me que estas a dar ordem para fazer 1 cast (conversão explicita)
Já agora colocavas qual é a excepção e colocavas JAVA no titulo...


isto também não me agrada nada:
Vector<Objectos> vect = new Vector<Objectos>();

tens a certeza que podes criar 1 vector sem dizeres o tamanho?
 
Última edição:
Esta é a excepção que ocorre. A linha 89 refere-se a tal linha do erro que explicitei na abertura do post.

Código:
A ler do ficheiro 'prod.dat'...
Exception in thread "main" java.lang.ClassCastException: Objectos
    at Teste.FileRead(Teste.java:89)
    at Teste.main(Teste.java:32)

Peço desculpa por me ter esquecido! Sim é JAVA :P

Mas num Vector não precisas de dizer o tamanho, penso eu de que...
 
Se de facto é Java, devo dizer que nunca programei em Java.
Contudo do teu código parece-me que estás a escrever o elemento i do vector, porém tentas ler utilizando o método readObject() da classe ObjectInputStream sem fornecer qualquer argumento. No mínimo esperava que tivesses que fornecer a classe de objecto que queres ler e algum tipo de índice ...
Já experimentaste ler os elementos do vector, um a um, tal como os escreveste ?
 
Back
Topo