Salvar conteúdo de uma variável

10 respostas
guirodr
Bom dia, sou novato no Java, já consigo fazer alguma coisa, eu gostaria de saber como eu posso salvar o conteudo de uma variavel em um arquivo TXT e depois lê-lo quando eu reabrir o programa. Por exemplo, eu tenho um Programa que cadastra 40 alunos, eu gostaria que quando eu fechasse e reabrisse o programa os alunos estivessem la, salvos, nos mesmos lugares. Eu pensei no TXT porque eu ainda não aprendi nada sobre salvar variaveis.
package escola;


import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


/**
 *
 * @author 210259
 */
public class TelaCadastro extends JInternalFrame {

    JLabel lblMatricula, lblNome, lblNota1, lblNota2, lblNota3, lblNota4, txtMedia, txtResultado, lblMedia, lblResultado, lblNotas, lblNumAlun, lblNumAl, lblBusca;
    JTextField txtMatricula, txtNome, txtNota1, txtNota2, txtNota3, txtNota4, txtBusca;
    JPanel pnPrincipal, pnNota, pnBusca;
    JButton bttOK, bttLIMPAR, bttFIM, bttANT, bttBusca;
    String [] nome= new String [40];
    String [] resultado= new String [40];
    Double [] Media= new Double [40];
    Double [] Nota1= new Double [40];
    Double [] Nota2= new Double [40];
    Double [] Nota3= new Double [40];
    Double [] Nota4= new Double [40];
    String [] Matricula= new String [40];
    int j,i,k=0, b=0, t=0;
    public TelaCadastro() {
        setTitle("Cadastro Aluno");
        setBounds(100, 100, 400, 300);
        setVisible(true);
        
        i=0;
        txtBusca= new JTextField();
        lblBusca= new JLabel("Buscar");
        
        pnBusca= new JPanel();
        lblMatricula = new JLabel("Matricula:");
        lblNome = new JLabel("Nome:");
        lblNota1 = new JLabel("1º Bimestre");
        lblNota2 = new JLabel("2º Bimestre");
        lblNota3 = new JLabel("3º Bimestre");
        lblNota4 = new JLabel("4º Bimestre");
        lblNotas = new JLabel("Nota:");
        lblMedia = new JLabel("Média:");
        lblResultado = new JLabel("Resultado:");
        lblNumAlun = new JLabel("Aluno nº:");
        lblNumAl = new JLabel("1");
        txtMatricula = new JTextField();
        txtNome = new JTextField();
        txtNota1 = new JTextField();
        txtNota2 = new JTextField();
        txtNota3 = new JTextField();
        txtNota4 = new JTextField();
        txtMedia = new JLabel();
        txtResultado = new JLabel();
        pnPrincipal = new JPanel();
        pnNota = new JPanel();
        bttOK = new JButton("OK");
        bttOK.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){

                        if(i<40){
                        
                            Matricula[i]=txtMatricula.getText();
                            nome[i]=txtNome.getText();
                            Nota1[i]=Double.parseDouble(txtNota1.getText());
                            Nota2[i]=Double.parseDouble(txtNota2.getText());
                            Nota3[i]=Double.parseDouble(txtNota3.getText());
                            Nota4[i]=Double.parseDouble(txtNota4.getText());
                            txtMedia.setText(String.valueOf((Nota1[i]+Nota2[i]+Nota3[i]+Nota4[i])/4));
                            Media[i]=Double.parseDouble(txtMedia.getText());
                            if(Media[i]>=7.0){
                                txtResultado.setText("APROVADO");
                            }
                            if((Media[i]>=3.5)&&(Media[i]<7.0)){
                                txtResultado.setText("RECUPERAÇÃO");
                            }
                            if(Media[i]<3.5){
                                txtResultado.setText("REPROVADO");
                            }
                            resultado[i]=txtResultado.getText();

                             i=i+1;
                             j=i;
                             
                        }else{
                        JOptionPane.showMessageDialog(null,"Impossivel processar dados, número máximo alcançado!","Erro",1);
                        }
                           

                        
                    }
            });
        bttLIMPAR = new JButton("Próximo >>");
            bttLIMPAR.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                            if(k==j&&k<i-1){
                            j=j+1;
                            lblNumAl.setText(String.valueOf(j+1));
                            j=j-1;
                            txtMatricula.setText(String.valueOf(Matricula[j+1]));
                            txtNome.setText(String.valueOf(nome[j+1]));
                            txtNota1.setText(String.valueOf(Nota1[j+1]));
                            txtNota2.setText(String.valueOf(Nota2[j+1]));
                            txtNota3.setText(String.valueOf(Nota3[j+1]));
                            txtNota4.setText(String.valueOf(Nota4[j+1]));
                            txtMedia.setText(String.valueOf(Media[j+1]));
                            txtResultado.setText(String.valueOf(resultado[j+1]));
                            j=j+1;
                            k=j;
                            }
                            
                            else if(i<40){
                            
                            
                            lblNumAl.setText(String.valueOf(i+1));
                            
                            txtMatricula.setText("");
                            txtNome.setText("");
                            txtNota1.setText("");
                            txtNota2.setText("");
                            txtNota3.setText("");
                            txtNota4.setText("");
                            txtMedia.setText("");
                            txtResultado.setText("");
                            
                            }else{
                        JOptionPane.showMessageDialog(null,"Impossivel armazenar, limite de 40 alunos alcançado!","Erro",1);

                    }
                    }


            });
        bttFIM = new JButton("Finalizar");
        bttFIM.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                int totap=0;
                int totrp = 0;
                int totrc = 0;
                Double somaap = 0.0;
                Double somarp = 0.0;
                Double somarc = 0.0;
                Double mediaap = 0.0;
                Double mediarp = 0.0;
                Double mediarc = 0.0;

                       for(int q=0; q<i+1; q++){

                        if(resultado[q]=="APROVADO"){
                            somaap=somaap+Media[q];
                            totap=totap+1;
                        }
                        if(resultado[q]=="RECUPERAÇÃO"){
                            somarp=somarp+Media[q];
                            totrp=totrp+1;
                        }
                        if(resultado[q]=="REPROVADO"){
                            somarc=somarc+Media[q];
                            totrc=totrc+1;
                        }
                       }
                mediaap = somaap / totap;
                mediarp = somarp / totrp;
                mediarc = somarc / totrc;

                JOptionPane.showMessageDialog(null,"Total de: " +
                        "\nAprovados: "+totap+
                        "\nRecuperação: "+totrp+
                        "\nReprovados: "+totrc+
                        "\n "+
                        "\nMédia dos: "+
                        "\nAprovados: "+mediaap+
                        "\nRecuperação: "+mediarp+
                        "\nReprovados: "+mediarc);
                    }});

        bttANT = new JButton("<<Anterior");
        bttANT.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){

                        if(j>0){

                            lblNumAl.setText(String.valueOf(j));
                            txtMatricula.setText(String.valueOf(Matricula[j-1]));
                            txtNome.setText(String.valueOf(nome[j-1]));
                            txtNota1.setText(String.valueOf(Nota1[j-1]));
                            txtNota2.setText(String.valueOf(Nota2[j-1]));
                            txtNota3.setText(String.valueOf(Nota3[j-1]));
                            txtNota4.setText(String.valueOf(Nota4[j-1]));
                            txtMedia.setText(String.valueOf(Media[j-1]));
                            txtResultado.setText(String.valueOf(resultado[j-1]));
                        j=j-1;
                        k=j;
                        }

         }});
        bttBusca= new JButton("Ir");
        bttBusca.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        if(b<i){

                        t=Integer.parseInt(txtBusca.getText());
                        b=t;
                        lblNumAl.setText(String.valueOf(b));
                            txtMatricula.setText(String.valueOf(Matricula[b-1]));
                            txtNome.setText(String.valueOf(nome[b-1]));
                            txtNota1.setText(String.valueOf(Nota1[b-1]));
                            txtNota2.setText(String.valueOf(Nota2[b-1]));
                            txtNota3.setText(String.valueOf(Nota3[b-1]));
                            txtNota4.setText(String.valueOf(Nota4[b-1]));
                            txtMedia.setText(String.valueOf(Media[b-1]));
                            txtResultado.setText(String.valueOf(resultado[b-1]));

                        }else { JOptionPane.showMessageDialog(null,"Campo vazio!","Erro",0);
                        txtBusca.setText("");}
                    }});
        pnBusca.setLayout(new GridLayout(1,2));
        pnBusca.add(txtBusca);
        pnBusca.add(bttBusca);
        pnNota.setLayout(new GridLayout(2,4));
        pnNota.add(lblNota1);
        pnNota.add(lblNota2);
        pnNota.add(lblNota3);
        pnNota.add(lblNota4);
        pnNota.add(txtNota1);
        pnNota.add(txtNota2);
        pnNota.add(txtNota3);
        pnNota.add(txtNota4);
        pnPrincipal.setLayout(new GridLayout(9, 2));
        pnPrincipal.add(lblNumAlun);
        pnPrincipal.add(lblNumAl);
        pnPrincipal.add(lblMatricula);
        pnPrincipal.add(txtMatricula);
        pnPrincipal.add(lblNome);
        pnPrincipal.add(txtNome);
        pnPrincipal.add(lblNotas);
        pnPrincipal.add(pnNota);
        pnPrincipal.add(lblMedia);
        pnPrincipal.add(txtMedia);
        pnPrincipal.add(lblResultado);
        pnPrincipal.add(txtResultado);
        pnPrincipal.add(bttOK);
        pnPrincipal.add(bttLIMPAR);
        pnPrincipal.add(bttFIM);
        pnPrincipal.add(bttANT);
        pnPrincipal.add(lblBusca);
        pnPrincipal.add(pnBusca);

        add(pnPrincipal);
        setClosable(true);
    }
}

Obrigado desde já :D

10 Respostas

yorgan

Aqui no GUJ tem esse artigo que deve te ajudar.
Mas o mais recomendado para esse tipo de situação é a utilização de banco de dados.

[]'s
Daniel

Cesimar

Outra forma interessante de salvar é usando XML.

http://www.guj.com.br/article.show.logic?id=15
http://www.guj.com.br/article.show.logic?id=22
http://www.guj.com.br/article.show.logic?id=144

guirodr

Obrigado pelas respostas, eu dei uma lida nesse artigo que o Daniel disse, num entendi muita coisa, é que eu comecei a estudar Java esse ano, e XML então, nem tenho ideia do que seja, mas enfim, obrigado pela ajuda.

Cesimar

Facilitarei as coisas pra você. Se quer apenas salvar em um arquivo de texto então lá vai:

import java.io.FileWriter;
import java.io.File;
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
class SaveTxt {
	public static void main(String[] args) {
		String textoQueSeraEscrito = "Texto que será escrito.";
		
		FileWriter arquivo;
		
		try {
			arquivo = new FileWriter(new File("Arquivo.txt"));
			arquivo.write(textoQueSeraEscrito);
			arquivo.close();
		
                        FileReader reader = new FileReader("Arquivo.txt");
                        BufferedReader leitor = new BufferedReader(reader);
                        String linha = null;
                        while(leitor.ready()) {
                                System.out.println("Linha: " + leitor.readLine());
                        }
                        reader.close();
                        leitor.close();

        } catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Só não deixe de aprender Java. Não pare de estudar. Continue aprendendo outras formas de guardar dados. E a maneira mais segura pra isso é usando banco de dados.

Abraço!

AlexandreGama

Fala guirodr, tranquilo?

Então cara, você precisa escrever em um arquivo txt por que ainda não viu sobre persistência em um banco
de dados ou por necessidade mesmo?
Escrevi agora um exemplo bemm simples de como você poderá ter sua idéia (não fiz o seu problema
pra você poder se divertir sozinho um pouco! :wink: )

package br.com.arquivos;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Main {

	public static void main(String[] args) throws IOException {
		escreveNoArquivoTexto();
		leDoArquivoTexto();
	}

	private static void leDoArquivoTexto() throws FileNotFoundException, IOException {
		File meuArquivo = new File("C:/alunos.txt");
		FileReader reader = new FileReader(meuArquivo);
		BufferedReader leitorDoArquivo = new BufferedReader(reader);
		String linha = null;
		
		while ((linha = leitorDoArquivo.readLine()) != null) {
			System.out.println(linha);
		}
	}

	private static void escreveNoArquivoTexto() throws IOException {
		File arquivo = new File("C:/alunos.txt");
		FileWriter escreveNoArquivo = new FileWriter(arquivo);
		PrintWriter escreveLinhas = new PrintWriter(escreveNoArquivo);
		
		for (int indiceAluno = 0; indiceAluno < 5; indiceAluno ++) {
			escreveLinhas.println("aluno" + indiceAluno);
		}
		escreveLinhas.close();
		escreveNoArquivo.close();
	}

}

O exemplo é bem simples! Você pode rodar ele na sua IDE e ele criará um arquivo no seu diretório “C:\alunos”.
Ele vai gravar alguns nomes e em seguida vai lê-los. Você pode adaptar para o seu problema, inserindo
os alunos que você criou e depois simplesmente ler o arquivo.

Depois do seu estudo, sugiro começar a estudar também sobre acesso a banco de dados. Talvez XML neste
momento seja um pouco precipitado, mas vai de gosto também.

Um tutorial rápido que acho interessante é este:
http://www.jdbc-tutorial.com/

E no exemplo que fiz você pode desenvolver outras funcionalidades, como validação do arquivo, tratamento
de exceção etc.
Vai fazendo por aí e manda aí o que tiver com problemas!

Abraços!

AlexandreGama

Poxa guirodr, enquanto eu escrevia o Cesimar também já tinha postado um pequeno exemplo! :smiley:
Bom, quanto mais melhor! =)

Abraços!

Cesimar

Com certeza Alexandre, quanto mais melhor. Aqui nos GUJ tem muito material. É só procurar e usar. É uma fonte muito rica.

AlexandreGama

:smiley:

guirodr

Obrigado pela ajuda de todos, mas isso é só por diversão mesmo, é que e gosto de ficar fazendo uns programinhas no java, e tipo, eu queria criar um botão que fazia com que o conteudo de cada variavel seja salvo no arquivo txt, e que depois quando eu abrisse o programa novamente ele lesse esse arquivo txt e colocasse o conteudo das variáveis novamente, entenderam? Mas enfim, obrigado pela ajuda, pelo menos eu ja consegui fazer com que o usuario entrasse com um texto em um JOptionPane e esse texto fosse salvo nesse arquivo txt, pelo exemplo de vocês. Valeu mesmo :smiley:

AlexandreGama

Perfeito!
Agora é só dificultar seus exemplos e postar as dúvidas que o pessoal ajuda! :wink:

Até mais!

Criado 17 de outubro de 2010
Ultima resposta 24 de out. de 2010
Respostas 10
Participantes 4