最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)在復(fù)制文件時(shí)使用進(jìn)度條(java實(shí)現(xiàn)進(jìn)度條)

 更新時(shí)間:2014年03月02日 15:04:34   投稿:zxhpj  
在對大文件操作時(shí),可能會(huì)需要些時(shí)間,此時(shí)為用戶提供進(jìn)度條提示是非常常見的一項(xiàng)功能,這樣用戶就可以了解操作文件需要的時(shí)間信息。本實(shí)例為大家介紹了在復(fù)制大的文件時(shí)使用的進(jìn)度條提示,需要注意的是,只有在讀取文件超過2秒時(shí),才會(huì)顯示進(jìn)度條

思路分析:

因?yàn)榧纫胁僮髅姘逵忠羞M(jìn)度條,所以肯定要出現(xiàn)兩個(gè)繼承JFrame類的窗體。
先看被調(diào)用的進(jìn)度條窗體,它不需要手動(dòng)操作,所以類的內(nèi)部實(shí)現(xiàn)一個(gè)方法就可以了。因?yàn)樵O(shè)計(jì)文件操作,所以要捕獲異常。首先根據(jù)要復(fù)制的文件創(chuàng)建File對象,以及根據(jù)復(fù)制后文件的保存地址創(chuàng)建File對象,然后創(chuàng)建FileOutputStream對象,再創(chuàng)建FileInputStream對象,之后是ProgressMonitorInputStream對象,然后讀取文件,如果總耗時(shí)超過2秒,將會(huì)自動(dòng)彈出一個(gè)進(jìn)度監(jiān)視窗口。接下來定義byte數(shù)組,再使用while循環(huán)讀取文件,使用FileOutputStream類的write()方法通過流寫數(shù)據(jù),再使用FileOutputStream類的close()方法關(guān)閉輸出流,最后使用ProgressMonitorInputStream類的close()方法關(guān)閉輸入流??梢娫摲椒ㄐ枰齻€(gè)參數(shù):彈出它的父窗口、要復(fù)制的文件地址以及要復(fù)制到的文件夾。
代碼如下:

ProgressMonitorTest.java:

復(fù)制代碼 代碼如下:

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); // 根據(jù)要復(fù)制的文件創(chuàng)建File對象
            File newFile = new File(newPath); // 根據(jù)復(fù)制后文件的保存地址創(chuàng)建File對象
            FileOutputStream fop = new FileOutputStream(newFile); // 創(chuàng)建FileOutputStream對象
            InputStream in = new FileInputStream(file);
            // 讀取文件,如果總耗時(shí)超過2秒,將會(huì)自動(dòng)彈出一個(gè)進(jìn)度監(jiān)視窗口。
            ProgressMonitorInputStream pm = new ProgressMonitorInputStream(
                    frame, "文件讀取中,請稍后...", in);
            int c = 0;
            byte[] bytes = new byte[1024]; // 定義byte數(shù)組
            while ((c = pm.read(bytes)) != -1) { // 循環(huán)讀取文件
                fop.write(bytes, 0, c); // 通過流寫數(shù)據(jù)
            }
            fop.close(); // 關(guān)閉輸出流
            pm.close(); // 關(guān)閉輸入流
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

3. 再看主窗體。JLabel、JTextField神馬的就不用說了,選擇文件和選擇文件夾這兩個(gè)按鈕也是老生常談了,最重要的是“開始復(fù)制”按鈕,將由它來負(fù)責(zé)彈出這個(gè)進(jìn)度條,這就需要開辟一個(gè)新的線程,所以主窗體不僅要繼承JFrame類,還要實(shí)現(xiàn)Runnable接口。

4. 在開始復(fù)制按鈕的具體方法里,首先創(chuàng)建一個(gè)Thread對象作為新的線程,然后調(diào)用該對象的start()方法,重載執(zhí)行run()方法,在該方法中創(chuàng)建一個(gè)進(jìn)度條對象,使用JTextField類的getText()方法獲取要復(fù)制的文件地址和要復(fù)制到的路徑,然后調(diào)用進(jìn)度條類里的方法。

代碼如下:

復(fù)制代碼 代碼如下:

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("在讀取文件時(shí)使用進(jìn)度條");
        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());
    }
  //確定復(fù)制按鈕單擊事件
    protected void do_copyButton_actionPerformed(ActionEvent arg0) {
       Thread thread = new Thread(this);
       thread.start();
    }
   //應(yīng)用多線程技術(shù)實(shí)現(xiàn)讀取操作
    @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()));
         
    }
}

相關(guān)文章

  • 微信APP支付Java代碼

    微信APP支付Java代碼

    這篇文章主要為大家詳細(xì)介紹了微信APP支付Java代碼,感興趣的小伙伴們可以參考一下
    2016-07-07
  • servlet重定向詳解(八)

    servlet重定向詳解(八)

    這篇文章主要為大家詳細(xì)介紹了servlet重定向的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 2020年IntelliJ IDEA最新最詳細(xì)配置圖文教程詳解

    2020年IntelliJ IDEA最新最詳細(xì)配置圖文教程詳解

    這篇文章主要介紹了2020年IntelliJ IDEA最新最詳細(xì)配置圖文教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    java大話之創(chuàng)建型設(shè)計(jì)模式教程示例

    這篇文章主要為大家介紹了java大話之創(chuàng)建型設(shè)計(jì)模式教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java自定義比較器實(shí)現(xiàn)中文排序

    Java自定義比較器實(shí)現(xiàn)中文排序

    這篇文章主要介紹了Java自定義比較器實(shí)現(xiàn)中文排序,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 淺談SpringBoot如何正確攔截thymeleaf異常

    淺談SpringBoot如何正確攔截thymeleaf異常

    Thymeleaf是一個(gè)模板引擎工具,主要用于頁面渲染操作,本文主要介紹了淺談SpringBoot如何正確攔截thymeleaf異常,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java的DelayQueue延遲隊(duì)列簡單使用代碼實(shí)例

    Java的DelayQueue延遲隊(duì)列簡單使用代碼實(shí)例

    這篇文章主要介紹了Java的DelayQueue延遲隊(duì)列簡單使用代碼實(shí)例,DelayQueue是一個(gè)延遲隊(duì)列,插入隊(duì)列的數(shù)據(jù)只有達(dá)到設(shè)置的延遲時(shí)間時(shí)才能被取出,否則線程會(huì)被阻塞,插入隊(duì)列的對象必須實(shí)現(xiàn)Delayed接口,需要的朋友可以參考下
    2023-12-12
  • 為什么Java項(xiàng)目中別用!=null做判空

    為什么Java項(xiàng)目中別用!=null做判空

    本文主要介紹了為什么Java項(xiàng)目中別用!=null做判空,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java中List集合及其實(shí)現(xiàn)類的方法詳解

    java中List集合及其實(shí)現(xiàn)類的方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于java中List集合及其實(shí)現(xiàn)類的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2019-06-06
  • java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù)

    java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù)

    這篇文章主要為大家詳細(xì)介紹了java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù),感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論

盐边县| 黎城县| 平武县| 北辰区| 开化县| 托里县| 葵青区| 绥德县| 苗栗市| 扎囊县| 山阴县| 深水埗区| 麻城市| 宾川县| 沙湾县| 延寿县| 姚安县| 水富县| 富源县| 渭南市| 邯郸市| 乡城县| 聊城市| 民权县| 镇远县| 六安市| 静宁县| 阿克苏市| 辰溪县| 仪征市| 任丘市| 高密市| 天水市| 大理市| 江都市| 恩施市| 凤庆县| 丹凤县| 黔东| 庐江县| 鄱阳县|