Foro de elhacker.net

Programación => Java => Mensaje iniciado por: SrTrp en 22 Noviembre 2018, 06:38 am



Título: JFileChooser guardar un archivo con nombre preterminado
Publicado por: SrTrp en 22 Noviembre 2018, 06:38 am
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
  1.            String direc = "";
  2.            try{
  3.            if(jfc.showSaveDialog(null)==jfc.APPROVE_OPTION){
  4.            direc = jfc.getSelectedFile().getAbsolutePath();
  5.  
  6.                File archivo = new File(direc);
  7.                 FileWriter ec = new FileWriter(archivo);
  8.                 ec.write("HOLAAAAAAAAAAA");                
  9.                 ec.close();
  10.  
  11.            }
  12.            }catch (Exception ex){
  13.            ex.printStackTrace();
  14.            }
  15.  


Título: Re: JFileChooser guardar un archivo con nombre preterminado
Publicado por: rub'n en 22 Noviembre 2018, 11:04 am
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
  1. package foro;
  2.  
  3. import javax.swing.*;
  4. import java.io.BufferedWriter;
  5. import java.io.IOException;
  6. import java.nio.file.Files;
  7. import java.nio.file.Path;
  8. import java.nio.file.Paths;
  9. import java.nio.file.StandardOpenOption;
  10. /**
  11.  * @author rub´n
  12.  */
  13. public class TestFileChooser {
  14.  
  15.    public TestFileChooser() {
  16.  
  17.    }
  18.  
  19.    public void EscribirEnArchivo(final String texto) {
  20.        //Async manera [b]sucia[/b]
  21.        new Thread(() -> {
  22.            //getDest() obtiene el path absoluto + se concatena con el nombre del archivo
  23.            final Path directorio = Paths.get(getDest().toString() + "/TuNombreDeArchivo.bat");
  24.            final StringBuilder sb = new StringBuilder();
  25.            try(final BufferedWriter bW = Files.newBufferedWriter(directorio,StandardOpenOption.CREATE)) {
  26.                bW.write(sb.append(texto).toString());
  27.                JOptionPane.showMessageDialog(null,"Escritura Lista");
  28.            } catch (IOException e) {
  29.                e.printStackTrace();
  30.            }
  31.        }).start();
  32.    }
  33.  
  34.    //Obtener destino
  35.    private Path getDest() {
  36.        final JFileChooser jFileChooser = new JFileChooser();
  37.        jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  38.        //jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); en este caso a ti te sirve escojer el directorio
  39.  
  40.        final int opc = jFileChooser.showOpenDialog(null);
  41.        if (!(opc == 0)) {
  42.            System.exit(0);
  43.        }
  44.        return jFileChooser.getSelectedFile().toPath();
  45.    }
  46.  
  47.    private static String getTexto() {
  48.        final StringBuilder sb = new StringBuilder();
  49.        return sb.append("@echo off\r\n")
  50.                .append("msg * Hola SrTrp\r\n")
  51.                .append(":end")
  52.                .toString();
  53.    }
  54.  
  55.    public static void main(String... _0x72) {
  56.        try {
  57.            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  58.        } catch (Exception ex){ex.printStackTrace();}
  59.        final TestFileChooser testFileChooser = new TestFileChooser();
  60.        testFileChooser.EscribirEnArchivo(getTexto());
  61.    }
  62. }
  63.