zoukankan      html  css  js  c++  java
  • App_FileCopier

    package studio.sm.homework;
    
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.Timer;
    
     
    
    public class App_FileCopy implements ActionListener,Runnable
    {
        JFrame frame;
        JProgressBar progressbar;
        JCheckBox jChkBox;
        Timer timer;
        JButton btn;
        
           File file_src;
           File file_des_folder;
           
           Thread thread;
     
        public App_FileCopy() {
    
           frame = new JFrame("App_FileCopier");
           frame.setBounds(300, 300, 400, 130);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setResizable(false);
           Container contentPanel = frame.getContentPane();
           progressbar = new JProgressBar();
           progressbar.setOrientation(JProgressBar.HORIZONTAL);
           //progressbar.setMinimum(0);
           //progressbar.setMaximum(100);
           //progressbar.setValue(0);
           progressbar.setStringPainted(true);
           //progressbar.setPreferredSize(new Dimension(300, 20));
           progressbar.setBorderPainted(true);
    
           JPanel panel = new JPanel();
    
           btn = new JButton("复制");
           btn.addActionListener(this);
           
           jChkBox = new JCheckBox("显示进度");
           jChkBox.setSelected(true);
           
           //--> jChkBox's ActionListener
           jChkBox.addActionListener(new ActionListener()
           {
    
            @Override
            public void actionPerformed(ActionEvent arg0)
            {
                if(jChkBox.isSelected()) progressbar.setVisible(true);
                else progressbar.setVisible(false);
                
            }});
           
                
           panel.add(btn);
           panel.add(jChkBox);
           //timer = new Timer(100, this);
    
           contentPanel.add(panel, BorderLayout.NORTH);
    
           contentPanel.add(progressbar, BorderLayout.SOUTH);
    
           frame.setVisible(true);
    
        }
    
     
    
        public void actionPerformed(ActionEvent e) 
        {    
           if (e.getSource() == btn) 
           {
               
                   JFileChooser file_src_chooser = new JFileChooser();
                   file_src_chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                   
                   JFileChooser folder_des_chooser = new JFileChooser();
                   folder_des_chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                   
                   file_src_chooser.setDialogTitle("请选择您要复制的文件");
                   folder_des_chooser.setDialogTitle("请选择您要复制到的路径");
                  
                   int whichButton = file_src_chooser.showOpenDialog(null);
                if (whichButton == JFileChooser.APPROVE_OPTION)
                {  
                    //path = file_src.getSelectedFile().getAbsolutePath();
                    file_src = file_src_chooser.getSelectedFile();
                    System.out.println("* Source file -> " + file_src.toString());
                    System.out.println("* --> the src file's length is " + file_src.length() + " bytes");
                    
                    int whichBTN = folder_des_chooser.showOpenDialog(null);
                    
                    
                    //--> okay, get everything done
                    if(whichBTN == JFileChooser.APPROVE_OPTION)
                    {
                        file_des_folder = folder_des_chooser.getSelectedFile();
                        System.out.println("* Destination -> " + file_des_folder.toString());
                        //fileCopy(file_src,file_des_folder);
                        
                        thread = new Thread(this);  
                        thread.start(); 
                    }
                    
                    
                    else if(whichBTN == JFileChooser.CANCEL_OPTION)
                    {
                        System.out.println("* The user clicked button cancel on this DIRECTORY chooser dialog.");
                    }
                    
                }
                else if (whichButton == JFileChooser.CANCEL_OPTION)
                {
                    System.out.println("* The user clicked button cancel on this FILE chooser dialog.");
                }
                       
           }
    //       if (e.getSource() == timer) 
    //       {
    //           int value = progressbar.getValue();
    //           if (value < 100)
    //              progressbar.setValue(++value);
    //           else 
    //           {
    //              timer.stop();
    //              //frame.dispose();
    //           }
    //       }
        }
    
     
        public void fileCopy(File src,File des)  //--> runs in a thread
        {
            //long file_length = src.length();
    
            
            //System.out.println("* --> the src file's length is " + file_length + " bytes");
     //       if (file_length >= 100)
    //        {
                //timer.start();
    //            System.out.println("* --> src file is larger than 100 bytes");
    //            progressbar.setMinimum(0);
    //            progressbar.setMaximum((int)file_length);
    //            progressbar.setValue(0);
     //       }
            
            
            File des_file = new File(des.toString() + File.separator + src.getName());
            System.out.println("* after combination,finally -> " + des_file.toString());
                   
            try
            {
                BufferedInputStream bis = new BufferedInputStream(new DataInputStream(new FileInputStream(src)));
                BufferedOutputStream bos = new BufferedOutputStream(new DataOutputStream(new FileOutputStream(des_file)));
                
                byte[] readBytes = new byte[1024];
                
                int size = bis.available();
                System.out.println("* --> the size of the src file is " + size + " bytes");
                
                size = size - (size % 1024) + 1024; 
                float per = (float) (100 / (size / 1024.0)); 
                int i = 0;
                
                while (true)
                {  
                    int len = bis.read(readBytes);  
                    if (len == -1)
                    {
                        progressbar.setValue(100);
                        JOptionPane.showMessageDialog(null, des_file.getName() + " 文件已经复制完成.");
                        progressbar.setValue(0);
                        break;
                    }
                        
                    bos.write(readBytes, 0, len);
                    bos.flush();
                    progressbar.setValue((int)(per * i ));  
                    //progressBarPanel.addEvent(e);  
                    i++;  
                }  
                
    //            while ((length = bis.read(readBytes, 0, readBytes.length)) > 0) 
    //            {          
    //                
    //                bos.write(readBytes, 0, length);
    //                bos.flush();
    //            }
                          
                System.out.println("* --> File copy completed.");
                bos.close();
                bis.close();
                            
            } catch (FileNotFoundException e)
            {
                e.printStackTrace();
            } catch (IOException e)
            {
    
                e.printStackTrace();
            }      
        }
        
        
         
        public static void main(String[] args)
        {
            new App_FileCopy();
        }
    
    
        @Override
        public void run()
        {    
            fileCopy(file_src,file_des_folder);
            
        }
    }
  • 相关阅读:
    bzoj2190[SDOI2008]仪仗队(欧拉函数)
    洛谷P3601签到题(欧拉函数)
    bzoj2818 Gcd(欧拉函数)
    poj2104 K-th Number(主席树静态区间第k大)
    只要有它,你就永远不会被打垮!
    网站美化常见CSS
    虚拟机安装CentOS6.4
    提高工作效率是有秘诀的
    不要消费信任
    项目经理必备7要素
  • 原文地址:https://www.cnblogs.com/savagemorgan/p/2829389.html
Copyright © 2011-2022 走看看