Gravar objectos

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

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.

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…

É 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.

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();
	  }    
  }
}

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 :slight_smile: vou carregar um objecto e gravo todo objeto no file.

mas vou tentando achar solucao… qqr coisa joga ai :stuck_out_tongue:

[code]
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();
    }
}

}[/code]

java.io.StreamCorruptedException at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at Salvar.main(Salvar.java:27)