|
|
@ -0,0 +1,208 @@ |
|
|
|
package myWindows.com.daniminguet.es; |
|
|
|
|
|
|
|
import java.awt.EventQueue; |
|
|
|
|
|
|
|
|
|
|
|
import javax.swing.JFrame; |
|
|
|
import javax.swing.JMenuBar; |
|
|
|
import java.awt.BorderLayout; |
|
|
|
import javax.swing.JMenuItem; |
|
|
|
import java.awt.Button; |
|
|
|
import javax.swing.JMenu; |
|
|
|
import javax.swing.JEditorPane; |
|
|
|
import javax.swing.JProgressBar; |
|
|
|
import javax.swing.JTextField; |
|
|
|
import java.awt.TextField; |
|
|
|
import java.awt.event.ActionEvent; |
|
|
|
import java.awt.event.ActionListener; |
|
|
|
import java.io.DataInputStream; |
|
|
|
import java.io.DataOutputStream; |
|
|
|
import java.io.File; |
|
|
|
import java.io.FileInputStream; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.OutputStream; |
|
|
|
import java.awt.Panel; |
|
|
|
import javax.swing.BoxLayout; |
|
|
|
import javax.swing.GroupLayout; |
|
|
|
import javax.swing.GroupLayout.Alignment; |
|
|
|
import javax.swing.SpringLayout; |
|
|
|
import java.awt.GridLayout; |
|
|
|
import java.awt.CardLayout; |
|
|
|
import javax.swing.JComboBox; |
|
|
|
import java.awt.FlowLayout; |
|
|
|
import javax.swing.JButton; |
|
|
|
import com.jgoodies.forms.layout.FormLayout; |
|
|
|
import com.jgoodies.forms.layout.ColumnSpec; |
|
|
|
import com.jgoodies.forms.layout.FormSpecs; |
|
|
|
import com.jgoodies.forms.layout.RowSpec; |
|
|
|
import javax.swing.JLabel; |
|
|
|
import java.awt.GridBagLayout; |
|
|
|
import java.awt.GridBagConstraints; |
|
|
|
import java.awt.Insets; |
|
|
|
import java.awt.Color; |
|
|
|
import javax.swing.Box; |
|
|
|
import javax.swing.JTextArea; |
|
|
|
import java.awt.TextArea; |
|
|
|
import java.awt.Font; |
|
|
|
|
|
|
|
public class MyWindow { |
|
|
|
|
|
|
|
private JFrame frame; |
|
|
|
private static TextField tfArchivoOrigen; |
|
|
|
private static TextField tfArchivoDestino; |
|
|
|
private static JButton btnBotonCopia; |
|
|
|
private static JProgressBar pbBarraProgreso; |
|
|
|
private static JLabel lblComprobacion; |
|
|
|
|
|
|
|
/** |
|
|
|
* Launch the application. |
|
|
|
*/ |
|
|
|
public static void main(String[] args) { |
|
|
|
EventQueue.invokeLater(new Runnable() { |
|
|
|
public void run() { |
|
|
|
try { |
|
|
|
MyWindow window = new MyWindow(); |
|
|
|
window.frame.setVisible(true); |
|
|
|
btnBotonCopia.addActionListener(new ActionListener() { |
|
|
|
@Override |
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
comprobarHacerCopia(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Create the application. |
|
|
|
*/ |
|
|
|
public MyWindow() { |
|
|
|
initialize(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Initialize the contents of the frame. |
|
|
|
*/ |
|
|
|
private void initialize() { |
|
|
|
frame = new JFrame(); |
|
|
|
frame.setBounds(100, 100, 450, 300); |
|
|
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
|
|
|
frame.getContentPane().setLayout(null); |
|
|
|
|
|
|
|
pbBarraProgreso = new JProgressBar(); |
|
|
|
pbBarraProgreso.setBounds(33, 179, 370, 40); |
|
|
|
frame.getContentPane().add(pbBarraProgreso); |
|
|
|
|
|
|
|
btnBotonCopia = new JButton("HACER COPIA"); |
|
|
|
btnBotonCopia.setBounds(33, 128, 150, 40); |
|
|
|
frame.getContentPane().add(btnBotonCopia); |
|
|
|
|
|
|
|
tfArchivoOrigen = new TextField(); |
|
|
|
tfArchivoOrigen.setFont(new Font("Dialog", Font.PLAIN, 16)); |
|
|
|
tfArchivoOrigen.setBounds(33, 26, 337, 32); |
|
|
|
frame.getContentPane().add(tfArchivoOrigen); |
|
|
|
tfArchivoOrigen.setBackground(new Color(255, 255, 255)); |
|
|
|
|
|
|
|
tfArchivoDestino = new TextField(); |
|
|
|
tfArchivoDestino.setFont(new Font("Dialog", Font.PLAIN, 16)); |
|
|
|
tfArchivoDestino.setBounds(33, 90, 337, 32); |
|
|
|
frame.getContentPane().add(tfArchivoDestino); |
|
|
|
|
|
|
|
JLabel lblDescripcionPrimerTF = new JLabel("Archivo de donde se quiere copiar:"); |
|
|
|
lblDescripcionPrimerTF.setFont(new Font("Tahoma", Font.PLAIN, 16)); |
|
|
|
lblDescripcionPrimerTF.setBounds(33, 0, 337, 20); |
|
|
|
frame.getContentPane().add(lblDescripcionPrimerTF); |
|
|
|
|
|
|
|
JLabel lblDescripcionSegundoTF = new JLabel("Archivo donde se copiará:"); |
|
|
|
lblDescripcionSegundoTF.setFont(new Font("Tahoma", Font.PLAIN, 16)); |
|
|
|
lblDescripcionSegundoTF.setBounds(33, 64, 337, 20); |
|
|
|
frame.getContentPane().add(lblDescripcionSegundoTF); |
|
|
|
|
|
|
|
lblComprobacion = new JLabel(""); |
|
|
|
lblComprobacion.setForeground(new Color(255, 0, 0)); |
|
|
|
lblComprobacion.setFont(new Font("Tahoma", Font.PLAIN, 16)); |
|
|
|
lblComprobacion.setBounds(33, 226, 370, 26); |
|
|
|
frame.getContentPane().add(lblComprobacion); |
|
|
|
} |
|
|
|
|
|
|
|
public static void comprobarHacerCopia() { |
|
|
|
//Comprueba que el TextField del archivo de origen no esté vacío, en ese caso, notificará el error |
|
|
|
if(tfArchivoOrigen.getText().length() <= 0) { |
|
|
|
lblComprobacion.setForeground(Color.RED); |
|
|
|
lblComprobacion.setText("No se ha introducido ningún fichero de origen"); |
|
|
|
} else { |
|
|
|
File ficheroOrigen = new File(tfArchivoOrigen.getText().toString()); |
|
|
|
|
|
|
|
try { |
|
|
|
//Comprueba que el archivo de origen existe y se puede leer |
|
|
|
if(ficheroOrigen.exists() && ficheroOrigen.canRead()) { |
|
|
|
//Comprueba que el TextField del archivo de destino no esté vacío, en ese caso, notificará el error |
|
|
|
if(tfArchivoDestino.getText().length() <= 0) { |
|
|
|
lblComprobacion.setForeground(Color.RED); |
|
|
|
lblComprobacion.setText("No se ha especificado el archivo de destino"); |
|
|
|
} else { |
|
|
|
File ficheroDestino = new File(tfArchivoDestino.getText().toString()); |
|
|
|
//Si el archivo de destino existe y tiene permisos para escribir, sobreescribirá los datos |
|
|
|
if(ficheroDestino.exists() && ficheroDestino.canWrite()) { |
|
|
|
FileInputStream fisCopiar = new FileInputStream(ficheroOrigen); |
|
|
|
FileOutputStream fosPegar = new FileOutputStream(ficheroDestino); |
|
|
|
hacerCopia(fisCopiar, fosPegar); |
|
|
|
fisCopiar.close(); |
|
|
|
fosPegar.close(); |
|
|
|
//Si el archivo de destino no existe, lo crea y escribe los datos |
|
|
|
} else if (!ficheroDestino.exists()) { |
|
|
|
ficheroDestino.createNewFile(); |
|
|
|
FileInputStream fisCopiar = new FileInputStream(ficheroOrigen); |
|
|
|
FileOutputStream fosPegar = new FileOutputStream(ficheroDestino); |
|
|
|
hacerCopia(fisCopiar, fosPegar); |
|
|
|
fisCopiar.close(); |
|
|
|
fosPegar.close(); |
|
|
|
//Si el archivo de destino introducido no existe o no se puede modificar, notificará el error |
|
|
|
} else { |
|
|
|
lblComprobacion.setForeground(Color.RED); |
|
|
|
lblComprobacion.setText("El fichero de destino no existe o no se puede escribir"); |
|
|
|
} |
|
|
|
} |
|
|
|
//Si el archivo de origen introducido no existe o no se puede leer, notificará el error |
|
|
|
} else { |
|
|
|
lblComprobacion.setForeground(Color.RED); |
|
|
|
lblComprobacion.setText("El fichero de origen no existe o no se puede leer"); |
|
|
|
} |
|
|
|
} catch (IOException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static void hacerCopia(FileInputStream fisCopiar, FileOutputStream fosPegar) throws IOException { |
|
|
|
lblComprobacion.setText(""); |
|
|
|
|
|
|
|
byte [] buf = fisCopiar.readAllBytes(); |
|
|
|
|
|
|
|
//Se inicializa la barra de progreso |
|
|
|
pbBarraProgreso.setValue(0); |
|
|
|
|
|
|
|
//Proceso de copia |
|
|
|
try { |
|
|
|
for(int i = 0; i < buf.length; i++) { |
|
|
|
Thread.sleep(50); |
|
|
|
fosPegar.write(buf[i]); |
|
|
|
pbBarraProgreso.setValue(i); |
|
|
|
pbBarraProgreso.update(pbBarraProgreso.getGraphics()); |
|
|
|
} |
|
|
|
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
|
|
|
|
fosPegar.flush(); |
|
|
|
|
|
|
|
lblComprobacion.setForeground(Color.BLUE); |
|
|
|
lblComprobacion.setText("Copia finalizada con éxito!"); |
|
|
|
} |
|
|
|
} |