程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java完成在復制文件時應用進度條(java完成進度條)

java完成在復制文件時應用進度條(java完成進度條)

編輯:關於JAVA

java完成在復制文件時應用進度條(java完成進度條)。本站提示廣大學習愛好者:(java完成在復制文件時應用進度條(java完成進度條))文章只能為提供參考,不一定能成為您想要的結果。以下是java完成在復制文件時應用進度條(java完成進度條)正文


思緒剖析:

由於既要有操作面板又要有進度條,所以確定要湧現兩個繼續JFrame類的窗體。
先看被挪用的進度條窗體,它不須要手動操作,所以類的外部完成一個辦法便可以了。由於設計文件操作,所以要捕捉異常。起首依據要復制的文件創立File對象,和依據復制後文件的保留地址創立File對象,然後創立FileOutputStream對象,再創立FileInputStream對象,以後是ProgressMonitorInputStream對象,然後讀取文件,假如總耗時跨越2秒,將會主動彈出一個進度監督窗口。接上去界說byte數組,再應用while輪回讀取文件,應用FileOutputStream類的write()辦法經由過程流寫數據,再應用FileOutputStream類的close()辦法封閉輸入流,最初應用ProgressMonitorInputStream類的close()辦法封閉輸出流。可見該辦法須要三個參數:彈出它的父窗口、要復制的文件地址和要復制到的文件夾。
代碼以下:

ProgressMonitorTest.java:


package cn.edu.xidian.crytoll;
import java.io.FileInputStream;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.ProgressMonitorInputStream;
public class ProgressMonitorTest {

    public void useProgressMonitor(JFrame frame, String copyPath, String newPath) {
        try {
            File file = new File(copyPath); // 依據要復制的文件創立File對象
            File newFile = new File(newPath); // 依據復制後文件的保留地址創立File對象
            FileOutputStream fop = new FileOutputStream(newFile); // 創立FileOutputStream對象
            InputStream in = new FileInputStream(file);
            // 讀取文件,假如總耗時跨越2秒,將會主動彈出一個進度監督窗口。
            ProgressMonitorInputStream pm = new ProgressMonitorInputStream(
                    frame, "文件讀取中,請稍後...", in);
            int c = 0;
            byte[] bytes = new byte[1024]; // 界說byte數組
            while ((c = pm.read(bytes)) != -1) { // 輪回讀取文件
                fop.write(bytes, 0, c); // 經由過程流寫數據
            }
            fop.close(); // 封閉輸入流
            pm.close(); // 封閉輸出流
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

3. 再看主窗體。JLabel、JTextField神馬的就不消說了,選擇文件和選擇文件夾這兩個按鈕也是陳詞濫調了,最主要的是“開端復制”按鈕,將由它來擔任彈出這個進度條,這就須要開拓一個新的線程,所以主窗體不只要繼續JFrame類,還要完成Runnable接口。他年夜爺的。

4. 在開端復制按鈕的詳細辦法裡,起首創立一個Thread對象作為新的線程,然後挪用該對象的start()辦法,重載履行run()辦法,在該辦法中創立一個進度條對象,應用JTextField類的getText()辦法獲得要復制的文件地址和要復制到的途徑,然後挪用進度條類裡的辦法。

代碼以下:


package cn.edu.xidian.crytoll;
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

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.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

public class UserMonitorFrame extends JFrame implements Runnable{

    /**
     *
     */
    private static final long serialVersionUID = 8674569541853793419L;
    private JPanel contentPane;
    private JTextField fileField;
    private JTextField searchTextField;
    private JTextField replaceTextField;
    private File file;
    private JTextField textField;
    private JTextField textField_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UserMonitorFrame frame = new UserMonitorFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public UserMonitorFrame() {
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 501, 184);
        setTitle("在讀取文件時應用進度條");
        getContentPane().setLayout(null);

        JLabel label = new JLabel("\u6587\u4EF6\u5730\u5740\uFF1A");
        label.setBounds(10, 10, 70, 15);
        getContentPane().add(label);

        textField = new JTextField();
        textField.setBounds(90, 7, 300, 21);
        getContentPane().add(textField);
        textField.setColumns(10);

        JButton button = new JButton("\u9009\u62E9\u6587\u4EF6");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        button.setBounds(400, 6, 93, 23);
        getContentPane().add(button);

        JLabel label_1 = new JLabel("\u590D\u5236\u5730\u5740\uFF1A");
        label_1.setBounds(10, 40, 70, 15);
        getContentPane().add(label_1);

        textField_1 = new JTextField();
        textField_1.setBounds(90, 38, 300, 21);
        getContentPane().add(textField_1);
        textField_1.setColumns(10);

        JButton button_1 = new JButton("\u9009\u62E9\u5730\u5740");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_1_actionPerformed(e);
            }
        });
        button_1.setBounds(400, 39, 93, 23);
        getContentPane().add(button_1);

        JButton button_2 = new JButton("\u5F00\u59CB\u590D\u5236");
        button_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_copyButton_actionPerformed(e);
            }
        });
        button_2.setBounds(182, 69, 93, 23);
        getContentPane().add(button_2);
    }
    protected void do_button_actionPerformed(ActionEvent e){
        JFileChooser chooser=new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        // 顯示文件翻開對話框
        int option = chooser.showOpenDialog(this);
        // 肯定用戶按下翻開按鈕,而非撤消按鈕
        if (option != JFileChooser.APPROVE_OPTION)
            return;
        // 獲得用戶選擇的文件對象
        file = chooser.getSelectedFile();
        // 顯示文件信息到文本框
        textField.setText(file.toString());
    }
    protected void do_button_1_actionPerformed(ActionEvent e){
        JFileChooser chooser=new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int option=chooser.showOpenDialog(this);
        if(option!=JFileChooser.APPROVE_OPTION)
            return;
        file=chooser.getSelectedFile();
        textField_1.setText(file.toString());
    }
  //肯定復制按鈕單擊事宜
    protected void do_copyButton_actionPerformed(ActionEvent arg0) {
       Thread thread = new Thread(this);
       thread.start();
    }
   //運用多線程技巧完成讀取操作
    @Override
    public void run() {
        ProgressMonitorTest test = new ProgressMonitorTest();
        String path = textField.getText();
        String save = textField_1.getText();
        test.useProgressMonitor(this,path,save+path.substring(path.lastIndexOf("."),path.length()));

    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved