Gravar objectos

5 respostas
W

Galera,

Preciso gravar um objeto numa file.

String name = "Teste";
FileOutputStream out = new FileOutputStream("File.dat",true);
ObjectOutputStream s = new ObjectOutputStream(out);
s.writeObject(name);

…e consigo tb ler.

FileInputStream in = new FileInputStream("File.dat");
ObjectInputStream s = new ObjectInputStream(in);
String name = (String)s.readObject();

Problema eh o seguinte:
Como posso saber o tamanho da file, tamanho do objeto q quero gravar???

ou outra forma para carregar um array desses objectos, qdo quero ler

valew

5 Respostas

E

Uma vez eu fiz isso gravando no arquivo um único objeto do tipo Vector, mas neste objeto estavam outros objetos que poderiam ser lidos depois de carregar o Vector do arquivo. É mais ou menos assim:

import java.io.*;
import java.util.*;

public class Salvar {

  public static void main(String args[]) {
    try {
	    String name1 = "Teste"; 
	    String name2 = "Teste2";
	    Vector v = new Vector();
	    v.add(name1); v.add(name2);
	    FileOutputStream out = new FileOutputStream("File.dat", true); 
	    ObjectOutputStream s = new ObjectOutputStream(out); 
	    s.writeObject(v);
	    
	    FileInputStream in = new FileInputStream("File.dat"); 
	    ObjectInputStream s2 = new ObjectInputStream(in); 
	    Vector vi = (Vector)s2.readObject();
	    for (int x=0; x<vi.size(); x++)
	      System.out.println((String)v.elementAt(x));
	  } catch(Exception e) {}    
  }
}

Creio que isso deva ajudar. Falow.

W

oii,

pois cara…

o valor true no codigo

FileOutputStream out = new FileOutputStream("File.dat", true);

faz com q o objeto gravado a seguir, seja gravado a seguir ao anterior.
O problema ai eh como poder ler os varios objetos gravados, pq msmo usando seu codigo, ele le o ultimo objeto gravado(vector) mas cada vez q vou correndo a app, o tamanho do ficheiro vai aumentando…

E

É como eu lhe disse. Eu também não consegui ler mais de um objeto do arquivo então eu gravei um único objeto, mas esse objeto é um Vector que contém vários outros objetos. Dessa forma, se você precisar adicionar outro objeto leia o Vector do arquivo, adicione o objeto desejado no Vector e depois salve todo o Vector novamente no arquivo. Foi a solução mais viável que encontrei e acho que não afeta o desempenho do programa.

E

Cara, acabei de encontrar outra solução pro nosso problema!
Da uma analisada nesse código e depois posta se resolveu o teu problema. Falow.

import java.io.*;

public class Salvar {

  public static void main(String args[]) {
    try {
	    String name1 = "Teste"; 
	    String name2 = "Teste2";
	    String name3 = "Teste3";
	    
	    FileOutputStream out = new FileOutputStream("File.dat", true); 
	    ObjectOutputStream s = new ObjectOutputStream(out); 
	    s.writeObject(name1);
	    s.writeObject(name2);
	    s.writeObject(name3);
	    
	    FileInputStream in = new FileInputStream("File.dat"); 
	    ObjectInputStream s2 = new ObjectInputStream(in); 
	    try {
	      while (true) {
	        String r = (String)s2.readObject();
	        System.out.println(r);
	      }
	    } catch (IOException e) {
	      s2.close();
	    }  
	    
	  } catch(Exception e) {
	    e.printStackTrace();
	  }    
  }
}
W

Cara, adaptei essa solucao ao codigo antigo e nada :sad: .
Mas tb confesso q n dediquei mto tmp nisso.

Olha por agora (dead line) vou usar a forma do objetao :) vou carregar um objecto e gravo todo objeto no file.

mas vou tentando achar solucao... qqr coisa joga ai :P

import java.io.*;
import java.util.Vector;

public class Salvar {
    public static void main(String args[]) {
        
        try { 
            String name1 = "Teste1";
            String name2 = "Teste2";
            String name3 = "Teste3";
            Vector v = new Vector();

            v.add(name1); 
            v.add(name2); 
            v.add(name3); 
        
            FileOutputStream out = new FileOutputStream("File.dat", true);
            ObjectOutputStream s = new ObjectOutputStream(out);
            s.writeObject(v);
        
            FileInputStream in = new FileInputStream("File.dat");
            ObjectInputStream s2 = new ObjectInputStream(in);
            //s2.skip(0);
            try {
                while (true) {
                    
                    Vector vi = (Vector)s2.readObject(); 
                    for (int x=0; x<vi.size(); x++) 
                        System.out.println((String)vi.elementAt(x)); 

                    
                    //String r = (String) s2.readObject();
                    //System.out.println(r);
                }
            } catch (IOException e) {
                s2.close();
                    e.printStackTrace();
            }
        
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
java.io.StreamCorruptedException
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Salvar.main(Salvar.java:27)

[img]http://img127.imageshack.us/img127/3961/wakky8hx.jpg[/img]

Criado 12 de junho de 2006
Ultima resposta 13 de jun. de 2006
Respostas 5
Participantes 2