Escrever conteúdo de um JTextField em arquivo.txt

7 respostas
C

Não tenho formação (apenas conhecimentos básicos) em java ou qualquer outra linguagem de programação.Isto é uma forma de passar tempo! Quero fazer uma agenda, para isso comecei por criar este formulário simples, confiante que é possível usar um simples ficheiro .txt como se de uma tabela se tratasse. Já perdi longas horas a tentar fazer correr o evento de inserir o texto contido no txtData, no arquivo.txt, que para já não estou a conseguir fazer funcionar. Será possível ajudar? Obrigado.

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

public class agendarem extends JFrame {

JButton btnInserir = new JButton ("Inserir");
JButton btnFechar = new JButton ("Fechar");
JTextField txtData = new JTextField(" ");

public agendarem (){

setLayout (null);
setSize (250,120);
setResizable(false);
setLocationRelativeTo(null);
setTitle("Agenda");

txtData.setBounds(20,10,200,30);
btnInserir.setBounds(20,50,90,30);
btnFechar.setBounds(130,50,90,30);

getContentPane().add(btnInserir);
getContentPane().add(txtData);
getContentPane().add(btnFechar);


setVisible (true);

 btnFechar.addActionListener(new ActionListener()   {  
                 
               public void actionPerformed(ActionEvent e)  {
                
                   System.exit(0);  
          }
                
    });


/*btnInserir.addActionListener(new ActionListener() {
  
  public void actionPerformed(ActionEvent e) {


saida.println(txtData.getText()); 

saida.close();
writer.close();
}
});*/
}

	         
public static void main (String[]args) throws IOException {
FileWriter writer = new FileWriter(new File("arquivo.txt"),true);
   PrintWriter saida = new PrintWriter(writer,true);
new agendarem();
}
}

7 Respostas

A

Vá ler um livro antes de sair programando, por favor.

L

Talvez a resposta que nosso amigo precisava fosse esta, mas acho que cuidado com a "forma"que se expressa para outra pessoa fazer algo deve ser no mínimo com educação. Trabalho com desenvolvimento mais de 15 anos, e ano passado comecei a estudar java e estou achando maravilhoso, já ajudei muitas pessoas com meu conhecimento em outras linguagens, e quando me deparo com um tipo de resposta assim, fico muito chateado.

Valeu pessoal!

abraço.

marcos.menezes
Codeas:
Não tenho formação (apenas conhecimentos básicos) em java ou qualquer outra linguagem de programação.Isto é uma forma de passar tempo! Quero fazer uma agenda, para isso comecei por criar este formulário simples, confiante que é possível usar um simples ficheiro .txt como se de uma tabela se tratasse. Já perdi longas horas a tentar fazer correr o evento de inserir o texto contido no txtData, no arquivo.txt, que para já não estou a conseguir fazer funcionar. Será possível ajudar? Obrigado.
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.lang.*;

public class agendarem extends JFrame {

JButton btnInserir = new JButton ("Inserir");
JButton btnFechar = new JButton ("Fechar");
JTextField txtData = new JTextField(" ");

public agendarem (){

setLayout (null);
setSize (250,120);
setResizable(false);
setLocationRelativeTo(null);
setTitle("Agenda");

txtData.setBounds(20,10,200,30);
btnInserir.setBounds(20,50,90,30);
btnFechar.setBounds(130,50,90,30);

getContentPane().add(btnInserir);
getContentPane().add(txtData);
getContentPane().add(btnFechar);


setVisible (true);

 btnFechar.addActionListener(new ActionListener()   {  
                 
               public void actionPerformed(ActionEvent e)  {
                
                   System.exit(0);  
          }
                
    });


/*btnInserir.addActionListener(new ActionListener() {
  
  public void actionPerformed(ActionEvent e) {


saida.println(txtData.getText()); 

saida.close();
writer.close();
}
});*/
}

	         
public static void main (String[]args) throws IOException {
FileWriter writer = new FileWriter(new File("arquivo.txt"),true);
   PrintWriter saida = new PrintWriter(writer,true);
new agendarem();
}
}

Camarada,

Veja abaixo as mudanças que fiz no seu arquivo.

package praticar;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
  
public class Agendarem extends JFrame implements ActionListener{  // INICIAR NOME DE CLASSE COM MAIUSCULA
	// TODO EVENTO DE BOTAO DEVE SER IMPLEMENTADO DE ACTIONLISTENER
	// TODO ACTIONLISTENER PRECISA DE UM METODO ACTIONPERFORMED.
  
	JButton btnInserir = new JButton ("Inserir");  
	JButton btnFechar = new JButton ("Fechar");  
	static JTextField txtData = new JTextField(" ");
	
	//static String arquivo = "";
	//File f = new File(arquivo);
  
	public Agendarem ()
	{  
		setLayout (null);  
		setSize (250,120);  
		setResizable(false);  
		setLocationRelativeTo(null);  
		setTitle("Agenda");  
  
		txtData.setBounds(20,10,200,30);  
		btnInserir.setBounds(20,50,90,30);  
		btnFechar.setBounds(130,50,90,30);  
  
		getContentPane().add(btnInserir);  
		getContentPane().add(txtData);  
		getContentPane().add(btnFechar);  
  
		// ADICIONAR O EVENTO AO CLICAR NO BOTAO
		
		btnInserir.addActionListener(this); // THIS, PALAVRA RESERVADA DO JAVA (LEIA SOBRE ISSO).
		
		setVisible (true);  
  
		btnFechar.addActionListener(this);	
	}
	
	public void actionPerformed(ActionEvent e)	// IMPLEMENTADO DENTRO DA CLASSE POREM FORA DO METODO AGENDAREM
	{                  
		Object o = e.getSource(); // CRIACAO DO OBJETO PARA CAPTURAR O EVENTO DO BOTAO.
		if (o == btnInserir)
		{
			inserir();
		}
		
		System.exit(0);    
    }
	
	void inserir()
	{
		JOptionPane.showMessageDialog(null, "Evento do botão OK");
	}
  
/*btnInserir.addActionListener(new ActionListener() { 
   
  public void actionPerformed(ActionEvent e) { 
 
 
saida.println(txtData.getText());  
 
saida.close(); 
writer.close(); 
} 
});*/    
               
	public static void main (String[]args) throws IOException
	{		
		try // LEIA SOBRE http://www.guj.com.br/articles/13
		{			
			FileWriter writer = new FileWriter("c:\agenda.txt"); // INFORMAR CAMINHO A SER GRAVADO
			PrintWriter saida = new PrintWriter(writer);
			BufferedWriter bw = new BufferedWriter(writer);
			//InputStream is = new InputStream(); // CONVERTE OS DADOS PARA CARACTERES
			InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			
			txtData.write(writer);
			saida.println(txtData);
			
			br.close();
			bw.close();
			saida.close();
			writer.close();
		}
				
		catch(IOException iox)
		{
			iox.printStackTrace();
		}		
	
		new Agendarem();  
	}
}

O maior problema que eu não to conseguindo extrair o valor digitado do painel, por isso quando grava no arquivo tá gravando bytes e nao caracteres.
Estou com um tópico aberto sobre isso.

Se conseguir tu me fala.

Abs.

marcos.menezes

Camarada,

Veja abaixo as alterações que realizei.

package praticar;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
  
public class Agendarem extends JFrame implements ActionListener{  // INICIAR NOME DE CLASSE COM MAIUSCULA
	// TODO EVENTO DE BOTAO DEVE SER IMPLEMENTADO DE ACTIONLISTENER
	// TODO ACTIONLISTENER PRECISA DE UM METODO ACTIONPERFORMED.
  
	JButton btnInserir = new JButton ("Inserir");  
	JButton btnFechar = new JButton ("Fechar");  
	static JTextField txtData = new JTextField(" ");
	
	//static String arquivo = "";
	//File f = new File(arquivo);
  
	public Agendarem ()
	{  
		setLayout (null);  
		setSize (250,120);  
		setResizable(false);  
		setLocationRelativeTo(null);  
		setTitle("Agenda");  
  
		txtData.setBounds(20,10,200,30);  
		btnInserir.setBounds(20,50,90,30);  
		btnFechar.setBounds(130,50,90,30);  
  
		getContentPane().add(btnInserir);  
		getContentPane().add(txtData);  
		getContentPane().add(btnFechar);  
  
		// ADICIONAR O EVENTO AO CLICAR NO BOTAO
		
		btnInserir.addActionListener(this); // THIS, PALAVRA RESERVADA DO JAVA (LEIA SOBRE ISSO).
		
		setVisible (true);  
  
		btnFechar.addActionListener(this);	
	}
	
	public void actionPerformed(ActionEvent e)	// IMPLEMENTADO DENTRO DA CLASSE POREM FORA DO METODO AGENDAREM
	{                  
		Object o = e.getSource(); // CRIACAO DO OBJETO PARA CAPTURAR O EVENTO DO BOTAO.
		if (o == btnInserir)
		{
			inserir();
		}
		
		System.exit(0);    
    }
	
	void inserir()
	{
		JOptionPane.showMessageDialog(null, "Evento do botão OK");
	}
  
/*btnInserir.addActionListener(new ActionListener() { 
   
  public void actionPerformed(ActionEvent e) { 
 
 
saida.println(txtData.getText());  
 
saida.close(); 
writer.close(); 
} 
});*/    
               
	public static void main (String[]args) throws IOException
	{		
		try // LEIA SOBRE http://www.guj.com.br/articles/13
		{			
			FileWriter writer = new FileWriter("c:\agenda.txt"); // INFORMAR CAMINHO A SER GRAVADO
			PrintWriter saida = new PrintWriter(writer);
			BufferedWriter bw = new BufferedWriter(writer);
			//InputStream is = new InputStream(); // CONVERTE OS DADOS PARA CARACTERES
			InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			
			txtData.write(writer);
			saida.println(txtData);
			
			br.close();
			bw.close();
			saida.close();
			writer.close();
		}
				
		catch(IOException iox)
		{
			iox.printStackTrace();
		}		
	
		new Agendarem();  
	}
}

Tambem nao consegui realizar a gravacao, estou ate com um topico aberto sobre isso em outro forum.
Nao estou sabendo como extrair pra um arquivo valor digitado no jtextfield.
O seu eu conseguir gravar, mais ao inves de ir caracteres, vai em bytes. ARRRG!

Daniel_Girotto

Boa Tarde
Apenas detalhes, coloquei um comentário no código onde estava o problema :slight_smile:

import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.PrintWriter;  
  
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JOptionPane;  
import javax.swing.JTextField;  
    
public class Agendarem extends JFrame implements ActionListener{  // INICIAR NOME DE CLASSE COM MAIUSCULA  
    // TODO EVENTO DE BOTAO DEVE SER IMPLEMENTADO DE ACTIONLISTENER  
    // TODO ACTIONLISTENER PRECISA DE UM METODO ACTIONPERFORMED.  
    
    JButton btnInserir = new JButton ("Inserir");    
    JButton btnFechar = new JButton ("Fechar");    
    static JTextField txtData = new JTextField(" ");  
      
    //static String arquivo = "";  
    //File f = new File(arquivo);  
    
    public Agendarem ()  
    {    
        setLayout (null);    
        setSize (250,120);    
        setResizable(false);    
        setLocationRelativeTo(null);    
        setTitle("Agenda");    
    
        txtData.setBounds(20,10,200,30);    
        btnInserir.setBounds(20,50,90,30);    
        btnFechar.setBounds(130,50,90,30);    
    
        getContentPane().add(btnInserir);    
        getContentPane().add(txtData);    
        getContentPane().add(btnFechar);    
    
        // ADICIONAR O EVENTO AO CLICAR NO BOTAO  
          
        btnInserir.addActionListener(this); // THIS, PALAVRA RESERVADA DO JAVA (LEIA SOBRE ISSO).  
          
        setVisible (true);    
    
        btnFechar.addActionListener(this);    
    }  
      
    public void actionPerformed(ActionEvent e)  // IMPLEMENTADO DENTRO DA CLASSE POREM FORA DO METODO AGENDAREM  
    {                    
        Object o = e.getSource(); // CRIACAO DO OBJETO PARA CAPTURAR O EVENTO DO BOTAO.  
        if (o == btnInserir)  
        {  
            inserir();  
        }            
        System.exit(0);      
    }  
      
    void inserir()  
    {      	
    	try // LEIA SOBRE http://www.guj.com.br/articles/13  
        {   
            FileWriter writer = new FileWriter("c:\agenda.txt", true); // INFORMAR CAMINHO A SER GRAVADO  
            PrintWriter saida = new PrintWriter(writer);  
            BufferedWriter bw = new BufferedWriter(writer);  
            InputStreamReader isr = new InputStreamReader(System.in);              
            BufferedReader br = new BufferedReader(isr);  
              
            /*
             * O Problema estava aqui
             */
            
            //txtData.write(writer);                        
            saida.println(txtData.getText().toString());            
              
            br.close();  
            bw.close();  
            saida.close();  
            writer.close();  
        }  
                  
        catch(IOException iox)  
        {  
            iox.printStackTrace();  
        }   
	
        JOptionPane.showMessageDialog(null, "Evento do botão OK");  
    }  
                 
    public static void main (String[]args) throws IOException  
    {                 
        new Agendarem();    
    }  
}

::EDIT - Cuidado pra não ressuscitar tópicos antigos

marcos.menezes

teste

Avelino7

Olha, eu uso isso aqui para escrever:

PrintWriter out = new PrintWriter("c:/pasta/" + i + ".txt"); out.println(imprimir[i]); out.println(imprimir[j]); out.println(imprimir[k]); out.close();
É importante dar um println para pular para a próxima linha, se não ele escreve tudo junto.
Ali eu estou passando um conteúdo de um vetor, mas você pode passar uma String ou o conteúdo de uma variável, sem problemas.

Para ler:

BufferedReader br = new BufferedReader(new FileReader("c:/pasta/" + codigo + ".txt")); //Lendo linha por linha... nome = br.readLine(); sexo = br.readLine(); rg = br.readLine(); cpf = br.readLine(); br.close();
Você pode usar um For para percorrer o .txt e assim acessar uma linha específica. perceba que ali está lendo linha por linha…

E uso isso aqui para excluir:

File arquivo = new File("c:/pasta/" + codigo + ".txt"); arquivo.delete();

Lembrando que manipulação de arquivos é para casos muito específicos, se for um sistema que precise armazenar dados, seria bom você utilizar banco de dados, mas sempre é bom aprender a manipular arquivos…

Espero que esses exemplos sirvam, qualquer problema com eles me avisem…
Espero ter ajudado ^^

Criado 15 de fevereiro de 2011
Ultima resposta 31 de mai. de 2012
Respostas 7
Participantes 6