📄 download.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 + -