JFileChooser guardar un archivo con nombre preterminado

Iniciado por SrTrp, 22 Noviembre 2018, 06:38 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Quiero guardar un archivo con un nombre predeterminado por ejemplo hola.bat, hola.txt y con la extensión que quiera pero al abrir el filechosser se elija la ruta de donde quiera guardarlo
Código (java) [Seleccionar]

JFileChooser jfc= new JFileChooser();
            String direc = "";
            try{
            if(jfc.showSaveDialog(null)==jfc.APPROVE_OPTION){
            direc = jfc.getSelectedFile().getAbsolutePath();
           
                File archivo = new File(direc);
                 FileWriter ec = new FileWriter(archivo);
                 ec.write("HOLAAAAAAAAAAA");                 
                 ec.close();
       
            }
            }catch (Exception ex){
            ex.printStackTrace();
            }

rub'n

#1
Hola,

Es mejor usar alguna clase que contenga un buffer interno algo mas grande para que la escritura lectura sea mas eficiente, BufferedWriter posser un buffer por default de 8192 bytes, mientras que FileWrite es de 1024bytes, aunque pues también funciona.



  • la line 23, se usa try-with-resources, usado en clases que implementen a AutoCloseable, evitando usar .close()
  • El método getTexto() se le concatenan saltos de linea, para crear un .bat con \r\n
  • Si vas escribir solo texto pues es mas fácil aun
  • En la linea 25, puedes Usar APPEND por CREATE, para insertar texto al final del archivo, sin borrar nada

Código (java) [Seleccionar]

package foro;

import javax.swing.*;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
/**
* @author rub´n
*/
public class TestFileChooser {

   public TestFileChooser() {

   }

   public void EscribirEnArchivo(final String texto) {
       //Async manera [b]sucia[/b]
       new Thread(() -> {
           //getDest() obtiene el path absoluto + se concatena con el nombre del archivo
           final Path directorio = Paths.get(getDest().toString() + "/TuNombreDeArchivo.bat");
           final StringBuilder sb = new StringBuilder();
           try(final BufferedWriter bW = Files.newBufferedWriter(directorio,StandardOpenOption.CREATE)) {
               bW.write(sb.append(texto).toString());
               JOptionPane.showMessageDialog(null,"Escritura Lista");
           } catch (IOException e) {
               e.printStackTrace();
           }
       }).start();
   }

   //Obtener destino
   private Path getDest() {
       final JFileChooser jFileChooser = new JFileChooser();
       jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
       //jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); en este caso a ti te sirve escojer el directorio

       final int opc = jFileChooser.showOpenDialog(null);
       if (!(opc == 0)) {
           System.exit(0);
       }
       return jFileChooser.getSelectedFile().toPath();
   }

   private static String getTexto() {
       final StringBuilder sb = new StringBuilder();
       return sb.append("@echo off\r\n")
               .append("msg * Hola SrTrp\r\n")
               .append(":end")
               .toString();
   }

   public static void main(String... _0x72) {
       try {
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
       } catch (Exception ex){ex.printStackTrace();}
       final TestFileChooser testFileChooser = new TestFileChooser();
       testFileChooser.EscribirEnArchivo(getTexto());
   }
}


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen