Como atualizar dados de um ficheiro?

2 respostas
S

Olá Pessoal
Estou com um problema no meu programa
O programa guarda dados no ficheiro sem problemas e consigo fazer a vizualização de todos os dados do ficheiro mas quando fecho e volto abrir o programa
para fazer novo cadastro e volto a fazer a vizualição de todos os dados o que me aparece é apenas o último cadastro que fiz.
O que eu queria mesmo era atualizar os dados e não sobrescrever.

abaixo estão as duas classes (Interface gráfica se for necessário e a que aguarda e vizualiza os dados do ficheiro)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

   public class Ficha extends JFrame{
      ClasseFicha ficha = new ClasseFicha();
      private JLabel jlbnome, jlbsobrenome,mostrar,jlbsaldo;
      private JTextField jtfnome, jtfsobrenome,jtfsaldo;
      private JButton btguardar,btvisualizar,btlocalizar;
   

   public Ficha(){
     jlbnome = new JLabel("Nome");
     jlbsobrenome = new JLabel("SobreNome");
     jlbsaldo = new JLabel("Saldo");
     jtfnome = new JTextField(15);   
     jtfsobrenome = new JTextField(15);   
     jtfsaldo = new JTextField(15);
     
     btguardar = new JButton("Guardar");
     btvisualizar = new JButton("Visualizar");
     btlocalizar = new JButton("Localizar");
     mostrar = new JLabel("");
     setTitle("Agenda");
     setSize(300,350);

     Tratamento evento = new Tratamento();
     btguardar.addActionListener(evento);
     btvisualizar.addActionListener(evento);
     btlocalizar.addActionListener(evento);
    
     Container tela= getContentPane();
     JPanel panel1 = new JPanel();
     panel1.add(jlbnome);
     panel1.add(jtfnome);
     panel1.add(jlbsobrenome);
     panel1.add(jtfsobrenome);
     panel1.add(jlbsaldo);
     panel1.add(jtfsaldo);
     JPanel panel2 = new JPanel();
     panel2.add(btguardar);
     panel2.add(btvisualizar);
     panel2.add(btlocalizar);
     panel1.setLayout(new GridLayout(3,3,0,2));
     panel1.setLayout(new GridLayout(3,3,0,2));
     tela.add(panel1,BorderLayout.NORTH);
     tela.add(panel2,BorderLayout.CENTER);
     setVisible(true);

   } 
   private class Tratamento implements ActionListener{
     public void actionPerformed(ActionEvent evento){
       
       if(evento.getSource()==btlocalizar){
       String find_name = JOptionPane.showInputDialog("Procurar cliente  pelo nome");
       Save_File save = new Save_File();
      
       }      

       if(evento.getSource()==btguardar){       
          
         Registar();
          jtfnome.setText(null);
          jtfsobrenome.setText(null);
          jtfsaldo.setText(null);
                  
       }

       if(evento.getSource()==btvisualizar){
     
         try{
           Save_File.ler();
         }
         catch(Exception ex){
           JOptionPane.showMessageDialog(null,ex.getMessage());
         }          
       } 
    }
   }
   
   //método registar
   public void Registar(){
     try{
     Save_File.inserir(this);
     }
     catch(Exception e){
       JOptionPane.showMessageDialog(null,"fff "+e.getMessage());
     }
   }
   //getters
   public String getNome(){ return jtfnome.getText();}

   public String getSobrenome(){ return jtfsobrenome.getText();}
   
   public Double getSaldo(){ return Double.parseDouble(jtfsaldo.getText());
   }
    //main
   public static void main(String[] args){
          
     new Ficha();

   }
 
   }
import java.io.*;
import java.util.*;
import javax.swing.*;

public class Save_File{
  static ArrayList<ClasseFicha> lista = new ArrayList<ClasseFicha>();
  

  public static void inserir(Ficha ficha)throws Exception{
    

     ClasseFicha c = new ClasseFicha();
     c.setNome(ficha.getNome());
     c.setSobrenome(ficha.getSobrenome());
     c.setSaldo(ficha.getSaldo());
     System.out.println(lista.size());
     lista.add(c);  
     gravar();
     
  }
  
  public static void gravar()throws Exception{
    
    ObjectOutputStream objecto = new ObjectOutputStream(new FileOutputStream("arquivo.dat"));
    
    objecto.writeObject(lista);
    objecto.close();
  
  }

  public static void ler()throws Exception{
   ObjectInputStream in = new ObjectInputStream(new FileInputStream("arquivo.dat"));
  ArrayList<ClasseFicha> arraylist = (ArrayList<ClasseFicha>)in.readObject();
  
    for(ClasseFicha elem : arraylist){
       JOptionPane.showMessageDialog(null,"Nome:  "+elem.getNome()+"\n"+"SobreNome:  "+elem.getSobrenome()+"\n"+"Saldo: "+elem.getSaldo());
    }
  
    }
}

2 Respostas

mauricioadl

faça assim:

new FileOutputStream(“texto.txt”, true);

S

mauricioadl, eu fiz o que recomendaste ,os primeiros dados que foram armazenados no ficheiro ja nao estam mais sendo sobreescrito quando fecho e volto abrir o programa só que agora já não atualiza e a outa coisa é que agora ele lê sô faz a leitura do primeiro cliente cadastrado o restante ele não lê

Criado 4 de janeiro de 2012
Ultima resposta 4 de jan. de 2012
Respostas 2
Participantes 2