File Copy with GUI in Java

 CopyGUI.java
~~~~~~~~~~~~~

package com.copyFile.test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * Copy File GUI
 *
 */
public class CopyGUI extends JFrame implements ActionListener, ChangeListener {

    private static final long serialVersionUID = 1L;
    private JLabel fromLabel;
    private JLabel toLabel;
    private JTextField fromField;
    private JTextField toField;
    private JButton fromButton;
    private JButton toButton;
    private JProgressBar progressBar;
    private JButton beginButton;
    private File fromFile;
    private File toFile;
    private long fileLength;
    private String fileName;

    public CopyGUI() {
        init();
    }

    private void init() {
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setBounds(200, 200, 400, 300);
        setResizable(false);
        setTitle("File Copy GUI");

        JPanel panel = new JPanel(null);
        add(panel);

        /*
         * add button and lebel
         */
        fromLabel = new JLabel("From:");
        fromLabel.setBounds(40, 20, 50, 20);

        fromField = new JTextField();
        fromField.setBounds(100, 20, 200, 20);

        fromButton = new JButton("Browse");
        fromButton.setBounds(300, 20, 80, 20);
        fromButton.addActionListener(this);

        toLabel = new JLabel("To: ");
        toLabel.setBounds(40, 40, 50, 20);

        toField = new JTextField();
        toField.setBounds(100, 40, 200, 20);

        toButton = new JButton("Browse");
        toButton.setBounds(300, 40, 80, 20);
        toButton.addActionListener(this);

        panel.add(fromLabel);
        panel.add(fromField);
        panel.add(fromButton);

        panel.add(toLabel);
        panel.add(toField);
        panel.add(toButton);

        /*
         * add progress bar
         */
        progressBar = new JProgressBar();
        progressBar.setBounds(50, 100, 300, 30);
        progressBar.addChangeListener(this);

        panel.add(progressBar);

        beginButton = new JButton("Begin Copy");
        beginButton.setBounds(200, 200, 100, 20);
        beginButton.addActionListener(this);

        panel.add(beginButton);

    }

    public void actionPerformed(ActionEvent e) {

        /*
         * choose from file
         */
        if (e.getSource() == fromButton) {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setMultiSelectionEnabled(false);
            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            int op = fileChooser.showOpenDialog(this);
            if (op == JFileChooser.APPROVE_OPTION) {
                fromFile = fileChooser.getSelectedFile();
                fileName = fromFile.getName();
                fromField.setText(fromFile.getAbsolutePath());
            }
        }

        /*
         * choose to file
         */
        if (e.getSource() == toButton) {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int op = fileChooser.showOpenDialog(this);
            if (op == JFileChooser.APPROVE_OPTION) {
                toFile = fileChooser.getSelectedFile();
                if (fileName != null) {
                    fileName = fromFile.getName();
                }
                toField.setText(toFile.getAbsolutePath() + fileName);
            }
        }

        /*
         * begin copy method
         */
        if (e.getSource() == beginButton) {

            /*
             * before copy check from file and to file
             */
            if ("".equals(fromField.getText())) {
                JOptionPane.showMessageDialog(this, "Input from File!");
                return;
            }

            if ("".equals(toField.getText())) {
                JOptionPane.showMessageDialog(this, "Input to File!");
                return;
            }

            /*
             * get copy from file and to file
             */
            fromFile = new File(fromField.getText());
            toFile = new File(toField.getText());

            /*
             * if to file exist, ask user information
             */
            if (toFile.exists()) {
                int op = JOptionPane.showConfirmDialog(this, toFile.getName()
                        + " file exist! \n Do your want to cover it?",
                        "Confirm Window", JOptionPane.YES_NO_OPTION);
                if (op == JOptionPane.NO_OPTION) {
                    JOptionPane.showMessageDialog(this, "Copy Canceled");
                    fromField.setText("");
                    toField.setText("");
                    return;
                }
            }

            /*
             * get file length, set progressBar max value
             */
            fileLength = fromFile.length();
            progressBar.setMaximum((int) fileLength);

            /*
             * copy method add to a new thread when copying, increase progress
             * bar
             */
            Runnable r1 = new Runnable() {

                public void run() {

                    try {
                        FileInputStream fis = new FileInputStream(fromFile);
                        FileOutputStream fos = new FileOutputStream(toFile);

                        byte[] buf = new byte[2048];
                        int size = 0;
                        int flag = 0;
                        while ((size = fis.read(buf)) != -1) {
                            fos.write(buf, 0, size);
                            flag += size;
                            progressBar.setValue(flag);
                        }

                        fis.close();
                        fos.close();

                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            };

            /*
             * start new thread
             */
            Thread t1 = new Thread(r1);
            t1.start();

        }
    }

    /*
     * update progress bar value
     */
    public void stateChanged(ChangeEvent e) {
        if (e.getSource() == progressBar) {
            if (progressBar.getValue() == progressBar.getMaximum()) {
                JOptionPane.showMessageDialog(this, "Copy Over");
                progressBar.setValue(0);
            }
        }
    }

    /*
     * Main method
     */
    public static void main(String[] args) {
        new CopyGUI().setVisible(true);
    }
}

No comments:

Post a Comment