//Rafael Angel Montero Fernández.
//Correo: Sharkyc12@gmail.com
//Fecha 23 de diciembre del 2017.
//Estas son bibliotecas para poder guardar el archivo de texto.
import java.io.BufferedWriter;//Escribe la informacion en el archivo o sea lo graba en el disco duro.
import java.io.File;//Comprueva si existe el archivo.
import java.io.FileWriter;//Indica el archivo en el que se va a escribir.
import java.io.IOException;//Para el control de errores. Se debe poner entre public ....() y {}
import java.awt.FileDialog;//Muestra un dialogo salvar archivos.
/////////////////////////////////////
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
//El archivo java debe ser guardado con el nombre de la clase publica.
//Guardelo con el nombre Formulario.java
public class Formulario extends JFrame implements ActionListener
{
private JLabel jlTexto;
private JTextArea jtaTexto;
private JButton jbSalir, jbGuardar;
private JScrollPane jspTexto;//Todo JTextArea debe llevar asociado un JScrollPane.
private Archivo archivo;
private Font fuente;
public Formulario()
{
//Configuarando las caracteristicas del form
super("Guardar texto.");
setSize(500,500);
setLayout(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
///////////////////////////////////////////////////
fuente=new Font("Tahoma", Font.BOLD, 16);
jlTexto=new JLabel("Escriba el texto");
jlTexto.setBounds(1,1,150,25);
getContentPane().add(jlTexto);
//El JTextArea se agrega al JScrollPane.
jtaTexto=new JTextArea();
jtaTexto.setFont(fuente);
jtaTexto.setToolTipText("Escriba el texto que quiera en el campo de texto");
jtaTexto.setBounds(1,35,490,370);
jspTexto=new JScrollPane(jtaTexto);
jspTexto.setBounds(1,35,490,370);//El JScrollPane tiene las mismas coordenadas que el JTextArea.
getContentPane().add(jspTexto);
jbGuardar=new JButton("Guardar");
jbGuardar.setToolTipText("Guarda lo que ha escrito en el campo de texto");
jbGuardar.setBounds(10,425,100,25);
getContentPane().add(jbGuardar);
jbGuardar.addActionListener(this);
jbSalir=new JButton("Salir");
jbSalir.setBounds(385,425,100,25);
jbSalir.addActionListener(this);
getContentPane().add(jbSalir);
archivo=new Archivo();
}//Constructor
public static void main(String args[])
{
Formulario frm=new Formulario();
frm.show();
}//main
public void actionPerformed(ActionEvent evt)
{
click_guardar(evt);
click_salir(evt);
}//actionPerformed
public void click_guardar(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase("Guardar"))
{
JOptionPane.showMessageDialog(null, archivo.escribir_archivo(jtaTexto.getText()) );
}//if
}//click_guardar
public void click_salir(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase("Salir"))
{
System.exit(0);
}//if
}//click_salir
}//Formulario
////////////////////////////////////////////////////////////
//Clase declarada en modo friend.
class Archivo
{
private File flArchivo;
private String Ruta_del_archivo;
private BufferedWriter bwEscritor;
private FileWriter fwArchivo_en_el_que_escribir;
private FileDialog fdGuardar;
public Archivo()
{
fdGuardar=new FileDialog(fdGuardar, "Guardar como", FileDialog.SAVE);
Ruta_del_archivo="";
flArchivo=new File(Ruta_del_archivo);
}//Constructor
public String escribir_archivo(String texto_a_guardar)
{
String mTextos[]=texto_a_guardar.split("\n"), respuesta="";//Se detecta el salto de linea, se va colocando en el vector.
//JOptionPane.showMessageDialog(null,texto_a_guardar);
fdGuardar.setVisible(true);
fdGuardar.dispose();
Ruta_del_archivo=fdGuardar.getDirectory()+fdGuardar.getFile() + ".txt";
flArchivo=new File(Ruta_del_archivo);
//Este condicional no afecta en nada la forma de guardar el archivo pero si es bueno usarlo para no borrar un trabajo previo.
if(flArchivo.exists())
{
respuesta="El archivo ya existia y ha sido sobreescrito. \nEn la direccion: " + flArchivo.getPath( ) ;
}//if
else
{
respuesta="El archivo ha sido creado exitosamente.\nEn la direccion: " + flArchivo.getPath( ) ;
}//else*/
try{
//Este bloque de codigo obligatoriamente debe ir dentro de un try.
fwArchivo_en_el_que_escribir=new FileWriter(flArchivo);//De momento se deja hasta aqui, listo para escribir, se escribe en el momento de dar la orden.
for (int i=0; i<=mTextos.length-1;i++)
{
//Se va escribiendo cada linea en el archivo de texto.
fwArchivo_en_el_que_escribir.write(mTextos[i] + "\r\n" );
}//for
//Este metodo escribe el archivo en el disco duro.
bwEscritor=new BufferedWriter(fwArchivo_en_el_que_escribir);
bwEscritor.close();//Se cierra el archivo.
}catch(Exception ex){JOptionPane.showMessageDialog(null,ex.getMessage());}
return respuesta;
}//escribir_archivo
}//Class Archivo
///////////////////////////////////////////////////////////////////////////////