[resolvido]Como Usar o jFileCooser para salvar e abrir um arquivo em DESKTOP?
11 respostas
D
DarthVictor
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.
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.
packageguj;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.Font;importjava.io.File;importjava.io.PrintWriter;importjava.io.StringWriter;importjavax.swing.BorderFactory;importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.SwingUtilities;importjavax.swing.border.TitledBorder;publicclassExemploJFileChooserextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJPaneljContentPane=null;privateJPanelpnlFile=null;privateJPanelpnlButtons=null;privateJButtonbtnSave=null;privateJTextFieldtxtFileName=null;privateJButtonbtnBrowse=null;privateJPanelgetPnlFile(){if(pnlFile==null){pnlFile=newJPanel();pnlFile.setLayout(newBoxLayout(getPnlFile(),BoxLayout.X_AXIS));pnlFile.setBorder(BorderFactory.createTitledBorder(null,"Output File",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,newFont("Dialog",Font.BOLD,12),newColor(51,51,51)));pnlFile.add(getTxtFileName(),null);pnlFile.add(getBtnBrowse(),null);}returnpnlFile;}privateJPanelgetPnlButtons(){if(pnlButtons==null){pnlButtons=newJPanel();pnlButtons.setLayout(newFlowLayout());pnlButtons.add(getBtnSave(),null);}returnpnlButtons;}privateJButtongetBtnSave(){if(btnSave==null){btnSave=newJButton();btnSave.setText("Save!");btnSave.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){try{if(!txtFileName.getText().isEmpty()){PrintWriterpw=newPrintWriter(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(Exceptionex){StringWritersw=newStringWriter();PrintWriterpws=newPrintWriter(sw);ex.printStackTrace(pws);pws.close();JOptionPane.showMessageDialog(ExemploJFileChooser.this,sw.toString());}}});}returnbtnSave;}privateJTextFieldgetTxtFileName(){if(txtFileName==null){txtFileName=newJTextField();}returntxtFileName;}privateJButtongetBtnBrowse(){if(btnBrowse==null){btnBrowse=newJButton();btnBrowse.setText("Browse...");btnBrowse.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){JFileChooserjfc=newJFileChooser();FilecurrentFileOrDirectory=null;if(txtFileName.getText().isEmpty()||!(newFile(txtFileName.getText())).exists())jfc.setCurrentDirectory(null);else{currentFileOrDirectory=newFile(txtFileName.getText());if(currentFileOrDirectory.isFile())jfc.setSelectedFile(currentFileOrDirectory);else{jfc.setCurrentDirectory(currentFileOrDirectory);}}intret=jfc.showSaveDialog(ExemploJFileChooser.this);if(ret==JFileChooser.APPROVE_OPTION){txtFileName.setText(jfc.getSelectedFile().getAbsolutePath());}}});}returnbtnBrowse;}publicstaticvoidmain(String[]args){// TODO Auto-generated method stubSwingUtilities.invokeLater(newRunnable(){publicvoidrun(){ExemploJFileChooserthisClass=newExemploJFileChooser();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}publicExemploJFileChooser(){super();initialize();}privatevoidinitialize(){this.setSize(555,114);this.setContentPane(getJContentPane());this.setTitle("Exemplo JFileChooser");}privateJPanelgetJContentPane(){if(jContentPane==null){jContentPane=newJPanel();jContentPane.setLayout(newBorderLayout());jContentPane.add(getPnlFile(),BorderLayout.CENTER);jContentPane.add(getPnlButtons(),BorderLayout.SOUTH);}returnjContentPane;}}
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.
ViniGodoy
Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:
FileWriterfr=newFileWriter(newFile("C:\\teste.txt"));PrintWriterpw=newPrintWriter(pw);pw.println("Isso será salvo num .txt");pw.flush();pw.close();
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.
D
DarthVictor
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?
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.
E
entanglement
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á.
// Javaimportjava.io.*;classTestePrintWriter{publicstaticvoidmain(String[]args)throwsFileNotFoundException{PrintWriterpw=newPrintWriter("c:\\temp\\teste.txt");pw.println("Adeus, mundo cruel!");pw.close();}}
// C#usingSystem;usingSystem.IO;classTesteStreamWriter{publicstaticvoidMain(String[]args){StreamWritersw=newStreamWriter("c:\\temp\\teste.txt");sw.WriteLine("Adeus, mundo cruel!");sw.Close();}}
Em vez de “StreamWriter” o Java usa “PrintWriter”. Que tal?
ViniGodoy
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.
TheKill
Amigo, sério... Você ao menos leu oque o ViniGodoy postou?
Arroz + Feijão... o.O
ViniGodoy:
Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:
FileWriterfr=newFileWriter(newFile("C:\\teste.txt"));PrintWriterpw=newPrintWriter(pw);pw.println("Isso será salvo num .txt");pw.flush();pw.close();
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();
D
DarthVictor
ViniGodoy:
DarthVictor:
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?
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.
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);
TheKill:
Amigo, sério... Você ao menos leu oque o ViniGodoy postou?
Arroz + Feijão... o.O
ViniGodoy:
Mas onde está sua dúvida, exatamente? Para salvar em txt você só usa um FileWriter, associado a um PrintWriter. Só isso:
FileWriterfr=newFileWriter(newFile("C:\\teste.txt"));PrintWriterpw=newPrintWriter(pw);pw.println("Isso será salvo num .txt");pw.flush();pw.close();
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();