Vector (ler) e dpois salvar em arquivo (codigo p/ modificar)

:frowning: fiz um q com um soh vect do tipo vect, le primeiro os arquivos, armazena no Vector e depois

grava e assim por diante ficando tipo assim:

primeira vez
(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))

segunda vez:

(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))
(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))

e assim por diante…

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

class DataIO {
String file;
public DataIO(String fl) {
file = fl;
}
public void grava(Vector v) {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream(file, false));
out.writeObject(v);
out.close();
} catch(IOException io) {
System.out.println(“Arquivo nao encontrado!”);
}
}
public Vector le() {
ObjectInputStream in = null;
Vector v = null;
try {
in = new ObjectInputStream(new FileInputStream(file));
v = (Vector)in.readObject();
in.close();
} catch(ClassNotFoundException cnfe) {
System.out.println(“Arquivo nao encontrado…”);
} catch(IOException io) {
System.out.println(“Excessao de entrada/saida”);
}
return v;
}

public static void main (String args []) {
String fich = “contas.txt”;
DataIO dt = new DataIO(fich);

//Vector vect = new Vector();

Vector vect = dt.le();

/if (vect !=null)
vect = dt.le();
/

if(vect != null)
for (int i = 0; i < vect.size(); i++)

{
 //if (((Conta)vect2.elementAt(i)).numero()==1)
 ((Conta)vect.elementAt(i)).print();
}   

vect.add(new Conta (1, “Caze”, “Junior”, 44.21));
vect.add(new Conta (2, “Antonio”, “Marinho”, 31.15));
vect.add(new Conta (3, “Thiago”, “bastos”, 841.50));

dt.grava(vect); //aki vc grava os 3 dados acima

vect.add(new Conta (1, “Pele”, “Claudio”, 44.21));
vect.add(new Conta (2, “Clailton”, “Maria”, 31.15));
vect.add(new Conta (3, “Raimundo”, “Ney”, 841.50));

dt.grava(vect); //aki vc acrescenta mais esses 3 no arquivo
//repare ke o arquivo foi aberto, gravado, fechado, aberto de novo mas
// desta vez foi gravado o mesmo vetor com os seis objetos
//caso vc tentásse criar um novo vetor e gravar somente os 3 ultimosobjetos,
//por causa da opçào boleana falsa o arquivo seria sobreposto
//e caso vc botásse a opção boleana como verdadeira o vetor não seriaregravado
//uma vez ke ele já estava gravado.

}
}


soh q tem um por em com um arquivo jah pronto funciona (segue em anexo o arquivo para teste), soh

q se for a primeira vez q eu executo o programa ele não funciona dah erro de essesao de entrada e

saida (tipo ele tah lendo um arquivo q não existe ainda), como faria pra corrigir esse bug dah

primeira vez q estarta o programa???
essa eh minha duvida!!!

tv bom, ficou legal essa implementação não ficou???

ai queria q ficasse assim

como eh a primeira vez q estarei lendo do vector e o arquivo texto ainda não foi criado ficaria

assim :

primeira vez
vazio

segunda vez:
(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))

terceira vez:
(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))
(1, “Caze”, “Junior”, 44.21));
(2, “Antonio”, “Marinho”, 31.15))
(3, “Thiago”, “bastos”, 841.50))
(1, “Pele”, “Claudio”, 44.21))
(2, “Clailton”, “Maria”, 31.15))
(3, “Raimundo”, “Ney”, 841.50))

arquivo texto pra fazer o teste (deve possuir o nome de contas.txt):

¬í sr java.util.VectorÙ—}[€;¯ I capacityIncrementI elementCount[ elementDatat [Ljava/lang/Object;xp ur [Ljava.lang.Object;?ÎXŸs)l xp sr Conta3À&ˆí1ô I numD saldoL pNomet Ljava/lang/String;L uNomeq ~ xp @FáG®{t Cazet Juniorsq ~ @?&ffffft aAntoniot aMarinhosq ~ @ŠL t Thiagot bastossq ~ @FáG®{t Pelet aClaudiosq ~ @?&ffffft Clailtont Mariasq ~ @ŠL t Raimundot Neysq ~ @FáG®{t Cazet Juniorsq ~ @?&ffffft aAntoniot aMarinhosq ~ @ŠL t Thiagot bastossq ~ @FáG®{t Pelet aClaudiosq ~ @?&ffffft Clailtont Mariasq ~ @ŠL t Raimundot Neypppppppp

modifiquem o codigo, façam o q quizerem, mas help!!!
implementem ele…
blzas!
isso tbm vai ajudar muita gente!!! :smiley: :frowning:

segue o arquivo conta q eu esqueci de colocar na mensagem anterior:

essa eh a ussada pela principal…

import java.io.*;

class Conta implements Serializable {
private int num;
private String pNome, uNome;
private double saldo;

public Conta(
	int num, String pNome, String uNome, double saldo) {
		this.num = num;
		this.pNome = pNome;
		this.uNome = uNome;
		this.saldo = saldo;
}

public int numero()
 {
 	return num;
 } 	
    
   
public void print() {
	System.out.println(
		num + ": " + pNome + " " + uNome +" -> saldo = " + saldo);
}

}

fui o 1º a votar :vamp:

No método le(), onde você está fazendo catch das Exceptions, antes da linha
} catch(IOException io) {
inclua
} catch(FileNotFoundException io) {
v = new Vector();

Quanto a votação: :?: :?: :?:

Por que você está comparando Array com Vector? Ainda que ambos sirvam para guardar uma lista de objetos, array tem um tamanho fixo e vector não, portanto os usos são bem diferentes. Há casos que utilizar uma Array daria muito trabalho, pois iria precisar ficar criando novos objetos e copiando o conteúdo cada vez que precisasse redimensionar, e outros casos usar Vector não faz sentido, pois você não precisa das facilidades dele e ele é mais lento que Array.

Concordo com vc, Bani, mas sou obrigado a dar uma de chato aqui: vectors são POTENCIALMENTE mais lentos que arrays, pq o acesso deles é sincronizado, mas operações como adicionar um grande número de elementos em um Vector são bem otimizadas. De novo, eu vou começar com aquele papo de que otimização deve ser feita DEPOIS que vc constatou que seu sistema está lento, fazendo uma medição cuidadosa pra descobrir quais são os pontos problemáticos.

Otimizar antes de sequer rodar um programa pode ser um bom jeito de parecer um bom programador, mas bons programadores primeiro escrevem código legível, depois escrevem código que funciona, e por último escrevem código que roda rápido :wink:

Concordo com vc, Bani, mas sou obrigado a dar uma de chato aqui: vectors são POTENCIALMENTE mais lentos que arrays, pq o acesso deles é sincronizado, mas operações como adicionar um grande número de elementos em um Vector são bem otimizadas.[/quote]

Veja que estou falando de Array “de verdade”, nem é de ArrayList, então por mais otimizado que seja, por dentro ele está usando uma array, então sempre vai ser mais lento do que a própria. E claro que ninguém vai sair redimensionando Array na mão só porque existe a vaga possibilidade de ficar mais rápido em algo que nem deve ser o gargalo do sistema, mas sair usando Vector em algo que uma simples array dá conta não faz muito sentido, dado até que fica mais complexo o uso.

O Paulo nos lembra isso em todos os seus post’s…:

[color=“red”]We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. – Donald E. Knuth[/color] :wink: