[resolvido]Como Usar o jFileCooser para salvar e abrir um arquivo em DESKTOP?

Tentei ao todo retirar esta dúvida em 8 foruns diferentes, por favor não coloquem coisas como gravar objeto e nem para console, mesmo porque estou cansado de tanto pesquisar e ninguém explicar como exibir o jFileCooser, ler o nome e salvar o arquivo em .txt. A maioria vem com coisas como escrever em console e outras sem nada a ver.

Esta muito difícil entender como faz.

Se é para explicar coisas sem nada a ver como salvar propriedades de objetos ou programação para console, nem venha responder.

Me desculpa a groseria, mais estou há tanto tempo me empenhando e quando penso que vai vir a resposta, vem sempre coisas sem nada a ver em 8 forums diferentes.

Tudo o que quero é exibir um jFileChooser, ler e salvar o arquivo e estou a dias pesquisando para NADA além de coisas sem nada a ver.

http://www.guj.com.br/posts/list/148485.java#803214

Veja como foi feito. Note que o JFileChooser não salva ou abre arquivos (ele serve para escolher arquivos - o nome dele é “Chooser”, ou seja, escolhedor); você é que deve fazer isso por conta.

package guj;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;

public class ExemploJFileChooser extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel pnlFile = null;
	private JPanel pnlButtons = null;
	private JButton btnSave = null;
	private JTextField txtFileName = null;
	private JButton btnBrowse = null;

	private JPanel getPnlFile() {
		if (pnlFile == null) {
			pnlFile = new JPanel();
			pnlFile.setLayout(new BoxLayout(getPnlFile(), BoxLayout.X_AXIS));
			pnlFile.setBorder(BorderFactory.createTitledBorder(null,
					"Output File", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 12), new Color(51, 51, 51)));
			pnlFile.add(getTxtFileName(), null);
			pnlFile.add(getBtnBrowse(), null);
		}
		return pnlFile;
	}
	private JPanel getPnlButtons() {
		if (pnlButtons == null) {
			pnlButtons = new JPanel();
			pnlButtons.setLayout(new FlowLayout());
			pnlButtons.add(getBtnSave(), null);
		}
		return pnlButtons;
	}
	private JButton getBtnSave() {
		if (btnSave == null) {
			btnSave = new JButton();
			btnSave.setText("Save!");
			btnSave.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try {
						if (!txtFileName.getText().isEmpty()) {
							PrintWriter pw = new PrintWriter (txtFileName.getText());
							pw.println ("Hello, world!");
							pw.close();
							JOptionPane.showMessageDialog (ExemploJFileChooser.this, "Arquivo " + txtFileName.getText() + " criado com sucesso.");
						} else {
							JOptionPane.showMessageDialog(ExemploJFileChooser.this, "Você precisa entrar com um nome de arquivo.");
						}
					} catch (Exception ex) {
						StringWriter sw = new StringWriter();
						PrintWriter pws = new PrintWriter (sw);
						ex.printStackTrace (pws);
						pws.close();
						JOptionPane.showMessageDialog(ExemploJFileChooser.this, sw.toString());
					}
				}
			});
		}
		return btnSave;
	}
	private JTextField getTxtFileName() {
		if (txtFileName == null) {
			txtFileName = new JTextField();
		}
		return txtFileName;
	}
	private JButton getBtnBrowse() {
		if (btnBrowse == null) {
			btnBrowse = new JButton();
			btnBrowse.setText("Browse...");
			btnBrowse.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					JFileChooser jfc = new JFileChooser();
					File currentFileOrDirectory = null;
					if (txtFileName.getText().isEmpty()
							|| !(new File(txtFileName.getText())).exists())
						jfc.setCurrentDirectory(null);
					else {
						currentFileOrDirectory = new File(txtFileName.getText());
						if (currentFileOrDirectory.isFile())
							jfc.setSelectedFile(currentFileOrDirectory);
						else {
							jfc.setCurrentDirectory(currentFileOrDirectory);
						}
					}
					int ret = jfc.showSaveDialog(ExemploJFileChooser.this);
					if (ret == JFileChooser.APPROVE_OPTION) {
						txtFileName.setText(jfc.getSelectedFile().getAbsolutePath());
					}
				}
			});
		}
		return btnBrowse;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				ExemploJFileChooser thisClass = new ExemploJFileChooser();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}
	public ExemploJFileChooser() {
		super();
		initialize();
	}
	private void initialize() {
		this.setSize(555, 114);
		this.setContentPane(getJContentPane());
		this.setTitle("Exemplo JFileChooser");
	}
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getPnlFile(), BorderLayout.CENTER);
			jContentPane.add(getPnlButtons(), BorderLayout.SOUTH);
		}
		return jContentPane;
	}

}

E tem mais outro exemplo aqui:
http://www.guj.com.br/posts/list/15/207725.java#1055757

[quote=ViniGodoy]E tem mais outro exemplo aqui:
http://www.guj.com.br/posts/list/15/207725.java#1055757[/quote]

Pelo menos neste exemplo, consegui entender ao menos os métodos.

Mais acho vou desistir, não consigo salvar em .txt. um editor de texto que não salva e nem pega salvo arquivos é inútil.

Não consigo. quando mexi no VS com isto, era só dar Stream e pronto, mais não estou entendendo como salvar.

Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:

[code]FileWriter fr = new FileWriter(new File(“C:\teste.txt”));
PrintWriter pw = new PrintWriter(pw);

pw.println(“Isso será salvo num .txt”);
pw.flush();
pw.close();
[/code]

A única coisa que o FileChooser faz a mais é dar ao usuário a possibilidade de escolher o nome do arquivo:

JFileChooser chooser = new JFileChooser();

//Abre o file chooser. Ele retorna JFileChooser.APPROVE_OPTION caso o usuário
//pressione ok.
if  (fileChooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {  
   return;  //Se não pressionou ok, saímos do método.
}  

//Usamos o getSelectedFile() para pegar o nome do arquivo selecionado
FileWriter fr = new FileWriter(chooser.getSelectedFile());
PrintWriter pw = new PrintWriter(pw);

pw.println("Isso será salvo num .txt");
pw.flush();
pw.close();

No VS ou no C# não é muito mais fácil.

Não sei se sou meio burro, mais não entendi a parte de “pw.println(“Isso será salvo num .txt”);” Ele pegara um arquivo e salvará obrigatoriamente como .txt?

Ou estou enganado?

[quote=ViniGodoy]

A única coisa que o FileChooser faz a mais é dar ao usuário a possibilidade de escolher o nome do arquivo:

JFileChooser chooser = new JFileChooser();

//Abre o file chooser. Ele retorna JFileChooser.APPROVE_OPTION caso o usuário
//pressione ok.
if  (fileChooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {  
   return;  //Se não pressionou ok, saímos do método.
}  

//Usamos o getSelectedFile() para pegar o nome do arquivo selecionado
FileWriter fr = new FileWriter(chooser.getSelectedFile());
PrintWriter pw = new PrintWriter(pw);

pw.println("Isso será salvo num .txt");
pw.flush();
pw.close();

No VS ou no C# não é muito mais fácil.[/quote]

Tio, você precisa de um dicionário português <-> espanhol? “Espanhol” é o Java, e “português” (um dialeto do espanhol, separado há alguns séculos somente) é o C#.

No seu caso, você quer a correspondência entre o C# e o Java, certo? Então vamos lá.

// Java
import java.io.*;

class TestePrintWriter {
    public static void main (String[] args) throws FileNotFoundException {
        PrintWriter pw = new PrintWriter ("c:\\temp\\teste.txt");
        pw.println ("Adeus, mundo cruel!");
        pw.close();
    }
}
// C#
using System;
using System.IO;

class TesteStreamWriter {
    public static void Main (String[] args) {
        StreamWriter sw = new StreamWriter ("c:\\temp\\teste.txt");
        sw.WriteLine ("Adeus, mundo cruel!");
        sw.Close();
    }
}

Em vez de “StreamWriter” o Java usa “PrintWriter”. Que tal?

Essa parte escreve o texto “Isso será salvo num .txt” no arquivo escolhido pelo usuário. No caso, usando um PrintWriter, o arquivo será obrigatoriamente um arquivo de texto (como você pediu no início do tópico).

É possível gerar arquivos com conteúdo puramente binário também, mas para isso, utiliza-se um FileOutputStream, no lugar de um FileWriter. E um DataOutputStream, no lugar de um PrintWriter.

Amigo, sério… Você ao menos leu oque o ViniGodoy postou?

Arroz + Feijão… o.O

[quote=ViniGodoy]Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:

[code]FileWriter fr = new FileWriter(new File(“C:\teste.txt”));
PrintWriter pw = new PrintWriter(pw);

pw.println(“Isso será salvo num .txt”);
pw.flush();
pw.close();
[/code]

A única coisa que o FileChooser faz a mais é dar ao usuário a possibilidade de escolher o nome do arquivo:

JFileChooser chooser = new JFileChooser();

//Abre o file chooser. Ele retorna JFileChooser.APPROVE_OPTION caso o usuário
//pressione ok.
if  (fileChooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {  
   return;  //Se não pressionou ok, saímos do método.
}  

//Usamos o getSelectedFile() para pegar o nome do arquivo selecionado
FileWriter fr = new FileWriter(chooser.getSelectedFile());
PrintWriter pw = new PrintWriter(pw);

pw.println("Isso será salvo num .txt");
pw.flush();
pw.close();

[/quote]

Essa parte escreve o texto “Isso será salvo num .txt” no arquivo escolhido pelo usuário. No caso, usando um PrintWriter, o arquivo será obrigatoriamente um arquivo de texto (como você pediu no início do tópico).

É possível gerar arquivos com conteúdo puramente binário também, mas para isso, utiliza-se um FileOutputStream, no lugar de um FileWriter. E um DataOutputStream, no lugar de um PrintWriter.[/quote]

Ahh é isto, para escrever no caso de um jTextArea, deveria colocar o objeto. Entendi

pw.println(jTextArea);  

E para variáveis

pw.println(num1+num2);  

[quote=TheKill]Amigo, sério… Você ao menos leu oque o ViniGodoy postou?

Arroz + Feijão… o.O

[quote=ViniGodoy]Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:

[code]FileWriter fr = new FileWriter(new File(“C:\teste.txt”));
PrintWriter pw = new PrintWriter(pw);

pw.println(“Isso será salvo num .txt”);
pw.flush();
pw.close();
[/code]

A única coisa que o FileChooser faz a mais é dar ao usuário a possibilidade de escolher o nome do arquivo:

JFileChooser chooser = new JFileChooser();

//Abre o file chooser. Ele retorna JFileChooser.APPROVE_OPTION caso o usuário
//pressione ok.
if  (fileChooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {  
   return;  //Se não pressionou ok, saímos do método.
}  

//Usamos o getSelectedFile() para pegar o nome do arquivo selecionado
FileWriter fr = new FileWriter(chooser.getSelectedFile());
PrintWriter pw = new PrintWriter(pw);

pw.println("Isso será salvo num .txt");
pw.flush();
pw.close();

[/quote][/quote]

Ja entendi o código, obrigado pela paciência.

No caso do JTextArea: