⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 download.java

📁 运用Java实现一个多线程文件下载
💻 JAVA
字号:
/* * download.java * * Created on 2008年5月19日, 上午10:52 */package 实验四;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLDecoder;import javax.swing.JOptionPane;/** * * @author  jsj */public class download extends javax.swing.JFrame {     /** Creates new form download */    public download() {        initComponents();    }        /** This method is called from within the constructor to     * initialize the form.     * WARNING: Do NOT modify this code. The content of this method is     * always regenerated by the Form Editor.     */    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents    private void initComponents() {        jPanel1 = new javax.swing.JPanel();        jTextFieldName = new javax.swing.JTextField();        jLabel2 = new javax.swing.JLabel();        jLabel3 = new javax.swing.JLabel();        jComboBox2 = new javax.swing.JComboBox();        jLabel1 = new javax.swing.JLabel();        jTextField1 = new javax.swing.JTextField();        jButtonDown = new javax.swing.JButton();        jScrollPane1 = new javax.swing.JScrollPane();        jTextArea1 = new javax.swing.JTextArea();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setBackground(java.awt.Color.black);        jPanel1.setBackground(new java.awt.Color(204, 204, 255));        jPanel1.setBorder(new javax.swing.border.MatteBorder(null));        jTextFieldName.setText(null);        jLabel2.setFont(new java.awt.Font("宋体", 0, 14));        jLabel2.setText("另存名称:");        jLabel3.setFont(new java.awt.Font("宋体", 0, 14));        jLabel3.setText("存储目录:");        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "D:", "C:", "E:", "F:" }));        jLabel1.setFont(new java.awt.Font("宋体", 0, 18));        jLabel1.setText("URL:");        jTextField1.setText("http://ty.cquc.edu.cn/upload/2008_05/08051410555815.wmv");        jButtonDown.setText("确定");        jButtonDown.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                jButtonDownActionPerformed(evt);            }        });        jTextArea1.setColumns(20);        jTextArea1.setRows(5);        jScrollPane1.setViewportView(jTextArea1);        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);        jPanel1.setLayout(jPanel1Layout);        jPanel1Layout.setHorizontalGroup(            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addGroup(jPanel1Layout.createSequentialGroup()                .addContainerGap()                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                    .addGroup(jPanel1Layout.createSequentialGroup()                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 350, javax.swing.GroupLayout.PREFERRED_SIZE)                        .addGap(18, 18, 18)                        .addComponent(jButtonDown))                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()                            .addComponent(jLabel3)                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                            .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)                            .addGap(18, 18, 18)                            .addComponent(jLabel2)                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                            .addComponent(jTextFieldName))                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()                            .addComponent(jLabel1)                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE))))                .addContainerGap(17, Short.MAX_VALUE))        );        jPanel1Layout.setVerticalGroup(            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)                    .addComponent(jLabel1)                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))                .addGap(18, 18, 18)                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)                    .addComponent(jLabel3)                    .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)                    .addComponent(jLabel2)                    .addComponent(jTextFieldName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                    .addGroup(jPanel1Layout.createSequentialGroup()                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE))                    .addGroup(jPanel1Layout.createSequentialGroup()                        .addGap(42, 42, 42)                        .addComponent(jButtonDown, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)))                .addGap(30, 30, 30))        );        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());        getContentPane().setLayout(layout);        layout.setHorizontalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)        );        layout.setVerticalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)        );        pack();    }// </editor-fold>//GEN-END:initComponents    private void jButtonDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDownActionPerformed        // TODO add your handling code here:        xiazai();    }//GEN-LAST:event_jButtonDownActionPerformed        /**     * @param args the command line arguments     */    public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new download().setVisible(true);            }        });    }      private void xiazai()      {   InputStream ins=null;          try{              URL u=new URL(URLDecoder.decode(jTextField1.getText(),"gbk"));              HttpURLConnection us=(HttpURLConnection)u.openConnection();              us.setRequestMethod("HEAD");              String s = us.getHeaderField("Accept-Ranges");            if (s != null && s.equals("bytes")) {                JOptionPane.showMessageDialog(this, "请求的文件总长度为" + us.getContentLength() + "字节。");            } else {                JOptionPane.showMessageDialog(this, "请求的文件不支持断点下载!");                return;            }            String pathName;            pathName = u.getFile();            fileName = pathName.substring(pathName.lastIndexOf('/')+1);             if (jTextFieldName.getText().equals("")) {                fileName = jTextFieldName.getText();            }             int number=us.getContentLength();             length=number/threadCount;           for(int i=1;i<=threadCount;i++)             {    int m,n;                m=(i-1)*length;                n=i*length-1;                if(i!=threadCount){               new Thread(new Myrunnable(m,n)).start();                }                else{                  new Thread(new Myrunnable(m,number-1)).start();                }           }          }catch(MalformedURLException e)          {              jTextArea1.append("出现MalformedURLException异常");          }catch(IOException e)          {              jTextArea1.append("出现IOException异常");      }           }      String fileName;      int threadCount=5;      int length;      int total=0;    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JButton jButtonDown;    private javax.swing.JComboBox jComboBox2;    private javax.swing.JLabel jLabel1;    private javax.swing.JLabel jLabel2;    private javax.swing.JLabel jLabel3;    private javax.swing.JPanel jPanel1;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JTextArea jTextArea1;    private javax.swing.JTextField jTextField1;    private javax.swing.JTextField jTextFieldName;    // End of variables declaration//GEN-END:variables  class Myrunnable implements Runnable{      int start,end;      Myrunnable(int a,int b){          start=a;          end=b;      }      public void run() {            BufferedInputStream bins=null;             BufferedOutputStream bous=null;         try{              URL u=new URL(URLDecoder.decode(jTextField1.getText(),"gbk"));              HttpURLConnection uc=(HttpURLConnection) u.openConnection();              uc.setRequestMethod("GET");               String mn="bytes="+start+"-"+end;                     uc.setRequestProperty("Range", mn);               bins=new BufferedInputStream(u.openStream());              RandomAccessFile  f=new RandomAccessFile(jComboBox2.getSelectedItem()+fileName,"rw");               f.seek(start);                byte[] b = new byte[1024];                int count;                while ((count = bins.read(b, 0, b.length)) != -1) {                f.write(b,0,count);            }               total=total+1;               if(total==threadCount){               jTextArea1.append("下载完毕");               }         } catch(MalformedURLException e){            jTextArea1.append("出现MalformedURLException异常");         }catch(IOException e){                 jTextArea1.append("出现IOException异常");      }finally{          try{              if(bins!=null)              {                  bins.close();              }             }catch(IOException e){                  System.out.println(e);                     }      }                      }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -