Boa tarde Pessoal este é meu primeiro topico, la vai minha duvida, estou começando a aprender Java em casa, estudando e lendo documentações. To fazendo um programa de uma agenda simples que grava os contatos em um arquivo txt.
Ate agora ja consegui fazer a gravação dos dados atravez do ObjectOutputStream e tambem consegui ler os dados com o ObjectInputStream, só que só consigo ler o primeiro objeto gravado no arquivo.
Abaixo segue todo meu codigo e classes.
Main
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, FileNotFoundException, ClassNotFoundException {
// pegando dados do usuario
Scanner input = new Scanner(System.in);
Contato novo = new Contato();
System.out.println("Digite o nome ");
novo.setNome(input.nextLine());
System.out.println("Digite o endereço ");
novo.setEnd(input.nextLine());
System.out.println("Digite o telefone ");
novo.setTel(input.nextLine());
System.out.println("Digite o email ");
novo.setEmail(input.nextLine());
novo.print();
System.out.println("Teste com leituras e gravaçoes");
Arquivo registro = new Arquivo();
System.out.println("gravando dados"); //gravaçao dos dados
registro.gravaDados(novo);
System.out.println("lendo arquivo");
registro.leDados();
}
}
Classe Contato
package agendatelefonica;
import java.io.*;
/**
*
* @author net
*/
public class Contato implements Serializable {
private String nome;
private String endereco;
private String tel;
private String email;
private boolean test = false;
private File arquivo = new File("arquivo.txt");
//metodos
public void setNome(String nome){
this.nome = nome;
}
public void setEnd(String end){
this.endereco = end;
}
public void setTel(String tel){
this.tel = tel;
}
public void setEmail(String email){
this.email = email;
}
public String getNome(){
return this.nome;
}
public String getEnd(){
return this.endereco;
}
public String getTel(){
return this.tel;
}
public String getEmail(){
return this.email;
}
public void print(){
System.out.println("Nome: " + this.nome);
System.out.println("Endereco: " + this.endereco);
System.out.println("Telefone: " + this.tel);
System.out.println("Nome " + this.email);
}
//construtores
public Contato(){
}
public Contato(String nome){
this.nome = nome;
}
public Contato(String nome, String end, String tel, String email){
this.nome = nome;
this.endereco = end;
this.tel = tel;
this.email = email;
}
}
Classe Arquivo É AQUI QUE ESTA MINHA DUVIDA.
package agendatelefonica;
import java.io.*;
/**
*
* @author net
*/
public class Arquivo implements Serializable{
private boolean test = false;
private File arquivo = new File("arquivo.txt");
public void gravaDados(Contato registro) throws IOException{
test = arquivo.exists();
if(test =! true){
arquivo.createNewFile();
}
FileOutputStream fos = new FileOutputStream("arquivo.txt",true);
ObjectOutputStream writer = new ObjectOutputStream(fos);
writer.writeObject(registro);
writer.flush();
writer.close();
fos.flush();
fos.close();
}
public void leDados() throws FileNotFoundException, IOException, ClassNotFoundException{
test = arquivo.exists();
if(test =! true){
System.out.println("Arquivo não existe");
}else{
FileInputStream fis = new FileInputStream("arquivo.txt");
ObjectInputStream reader = new ObjectInputStream(fis);
Contato registro = (Contato) reader.readObject(); // quero ler todo arquivo e colocar num array da classe Contato é possivel?
registro[i].print(); // mostra o conteudo para teste
reader.close();
fis.close();
}
}
public Arquivo(){
}
}