usando ruta por personalizar guardar filtro explorador defecto archivos archivo java swing file-io jfilechooser

ruta - personalizar jfilechooser java



¿Cómo guardar un archivo usando JFileChooser en Java? (3)

Necesitas close() tu FileWriter.

Tengo el siguiente código. Guarda archivo pero con contenido vacío. ¿Qué tiene de malo?

public void saveMap() { String sb = "TEST CONTENT"; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File("/home/me/Documents")); int retrival = chooser.showSaveDialog(null); if (retrival == JFileChooser.APPROVE_OPTION) { try { FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt"); fw.write(sb.toString()); } catch (Exception ex) { ex.printStackTrace(); } } }


No te olvides de flush y close tu FileWriter .


Si está utilizando Java 7, use try con recursos. Así es como lo harías:

try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) { fw.write(sb.toString()); }

Probar con recursos automáticamente llama a close() en caso de error o éxito.

Si no está utilizando Java 7, no olvide llamar a close() . close() llamará automáticamente a flush() .

... fw.close(); ...

Para comprender por qué debe vaciarse, debe comprender cómo funciona un FileWriter. Cuando dices fw.write("blah") , en realidad coloca esa cadena en un búfer en la memoria. Una vez que llena el búfer, FileWriter escribe la cadena en el disco duro. Tiene este comportamiento porque escribir archivos es mucho más eficiente en grandes porciones.

Si desea vaciar el búfer antes de que el búfer alcance su capacidad, deberá informar a FileWriter llamando a flush() . Llamar a flush() también puede ser muy importante cuando se comunica, por ejemplo, a través de Internet, ya que tendrá que vaciar antes de que el otro extremo pueda ver su mensaje. No les servirá de mucho si su mensaje está guardado en la memoria.

Una vez que haya terminado con cualquier flujo de E / S, debe llamar a close() (con la excepción de los flujos de E / S estándar). Esto significa que el sistema operativo ya no tiene que mantener este flujo. En algunos casos, hay un número limitado de secuencias que se pueden abrir, como con los archivos, por lo que es extremadamente importante que no se olvide de cerrar.

Cuando llama a close, en realidad hace dos cosas: vacía el búfer y luego cierra la secuencia. Esto es para asegurarse de que no quede nada antes de que se cierre la secuencia.