[ObjectOutputStream] Salvar Vector em Arquivo

5 respostas
N

Gostaria de informar que esse é meu primeiro tópico aqui no GUJ, sempre quando estou com dúvidas eu fuço os tópicos aqui e sempre me resolvem, porém estou com um probleminha que gostaria de pedir ajuda diretamente à vocês.

Eu criei um Repositorio no qual eu salvo um vetor de objeto(Vector) através do ObjectOutputStream, mas sempre que rodo o programa da sempre o mesmo erro, IOException.

Quando uso o método inserirCliente(linha 14), eu recebo um IOException, que vem do metodo escreverArquivo(linha 52), mas não consigo achar o erro, se alguém poder me ajudar ficaria muito grato!!!
Att.

Segue o código abaixo:

public class RepositorioClienteArquivo implements Repositorio{
	
	private Vector<Cliente> vectorClientes;
	private File file;
	
	public RepositorioClienteArquivo() throws IOException, ClassNotFoundException{
		this.file = new File("arquivoClientes.data");
		this.vectorClientes = new Vector<Cliente>();
		escreverArquivo();
		lerArquivo();
	}

	
	public void inserirCliente(Cliente c) throws IOException {
		this.vectorClientes.add(c);
		escreverArquivo();
		
	}

	
	public void removerCliente(Cliente c) throws IOException{
		this.vectorClientes.remove(c);
		escreverArquivo();
		
	}

	
	public Vector<Cliente> procurarCliente(String entrada) {
		
		Vector<Cliente> resultado = new Vector<Cliente>();
		Iterator<Cliente> lista = new Iterator<Cliente>(this.vectorClientes);
		
		while(lista.hasNext()){
			Cliente c = lista.next();
			if(c.getNomeCliente().toLowerCase().contains(entrada.toLowerCase())){
				resultado.add(c);
			}
		}
		
		
		
		return resultado;
	}
	
	@SuppressWarnings("unchecked")
	public void lerArquivo() throws ClassNotFoundException, IOException{
		ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));
		this.vectorClientes = (Vector<Cliente>)input.readObject();
		
	}
	
	public void escreverArquivo() throws IOException{
		ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(file));
		output.writeObject(this.vectorClientes);
		
		
	}

}

5 Respostas

jweibe

Posta a Stack completa…

N
A Classe Cliente :
public class Cliente implements Serializable {

	private String cpfCliente;
	private String foneCliente;
	private String nomeCliente;
	private Endereco enderecoCliente;
	
	
	public Cliente(String cpf, String fone, String nome, Endereco endereco){
		
		this.cpfCliente = cpf;
		this.foneCliente = fone;
		this.nomeCliente = nome;
		this.enderecoCliente = endereco;
		
	}

	public String getCpfCliente() {
		return cpfCliente;
	}

	public void setCpfCliente(String cpfCliente) {
		this.cpfCliente = cpfCliente;
	}

	public String getFoneCliente() {
		return foneCliente;
	}

	public void setFoneCliente(String foneCliente) {
		this.foneCliente = foneCliente;
	}

	public String getNomeCliente() {
		return nomeCliente;
	}

	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}

	public Endereco getEnderecoCliente() {
		return enderecoCliente;
	}

	public void setEnderecoCliente(Endereco enderecoCliente) {
		this.enderecoCliente = enderecoCliente;
	}


	
}
Parte do Frame do programa que chama o metodo :
try{	
				
				fachada.inserirCliente(tf_cpf.getText(), tf_fone.getText(), tf_nome.getText(), tf_rua.getText(), numero,
						tf_complemento.getText(), tf_bairro.getText(), tf_cidade.getText());
				
				JOptionPane.showMessageDialog(FrameDelivery.this, "Cadastro Realizado Com Sucesso");
			} // fim do try
			
			catch(IOException e){
				JOptionPane.showMessageDialog(null, "IO");
			}
E

A classe Endereco implementa Serializable?

N

Não implementa não, vou fazer a alteração aqui!!!

@Aweee cara, pegouuu que felicidade, não acredito que xinguei jesus por isso!!!
Valeu valeu valeu

ViniGodoy

Eu geralmente prefiro usar um DataOutputStream e serializar meus objetos manualmente.
Dá mais trabalho, mas você tem controle total sobre o formato dos arquivos.

Sem falar que eu sempre uso uns bytes no início do arquivo para garantir que é válido (MAGIC_NUMBER) e dizer qual é a sua versão.

Criado 20 de setembro de 2012
Ultima resposta 20 de set. de 2012
Respostas 5
Participantes 4