简易下载器java源码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;

public class CopyOftest extends JFrame implements Runnable {

static JLabel label_1_3;

static int sudu = 0;

static boolean fo = true;

final static JLabel label_1_2 = new JLabel();

final static JLabel label_1_1_1_1 = new JLabel();

final static JLabel label_2 = new JLabel();

Thread thiss = new Thread(this);

public static void main(String args[]) {
   try {
    CopyOftest frame = new CopyOftest();
    frame.setVisible(true);
   } catch (Exception e) {
    e.printStackTrace();
   }
}

/**
* Create the frame
*/
public CopyOftest() {
   super("java版下载器");
   getContentPane().setLayout(null);
   setBounds(100, 100, 497, 103);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   final JMenuBar menuBar = new JMenuBar();
   setJMenuBar(menuBar);

   final JMenu menu = new JMenu();
   menu.setText("开始");
   menuBar.add(menu);

   final JMenuItem menuItem = new JMenuItem();
   menuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
     String url = JOptionPane.showInputDialog("下载地址");
     if (null != url) {
      if (url.matches("http://.+")) {
       label_2.setText(tiqu(url).toString());
       try {
        display d = new display();
        Thread t = new Thread(d);
        d.saveToFile(url, "c://" + tiqu(url).toString());
        t.start();
        thiss.start();
       } catch (IOException e) {
        e.printStackTrace();
       }
      } else {
       System.out.println("ON");
      }
     }
    }
   });
   menuItem.setText("新建");
   menu.add(menuItem);

   final JLabel label = new JLabel();
   label.setHorizontalAlignment(SwingConstants.CENTER);
   label.setText("文件名");
   label.setBounds(53, 1, 48, 15);
   getContentPane().add(label);

   final JLabel label_1 = new JLabel();
   label_1.setHorizontalAlignment(SwingConstants.CENTER);
   label_1.setText("文件大小");
   label_1.setBounds(168, 1, 75, 15);
   getContentPane().add(label_1);

   final JLabel label_1_1 = new JLabel();
   label_1_1.setHorizontalAlignment(SwingConstants.CENTER);
   label_1_1.setText("进度");
   label_1_1.setBounds(292, 1, 48, 15);
   getContentPane().add(label_1_1);

   final JLabel label_1_1_1 = new JLabel();
   label_1_1_1.setHorizontalAlignment(SwingConstants.CENTER);
   label_1_1_1.setText("速度");
   label_1_1_1.setBounds(405, 1, 48, 15);
   getContentPane().add(label_1_1_1);

   label_2.setHorizontalAlignment(SwingConstants.CENTER);
   label_2.setBounds(10, 22, 141, 15);
   getContentPane().add(label_2);

   label_1_2.setHorizontalAlignment(SwingConstants.CENTER);
   label_1_2.setBounds(168, 22, 75, 15);
   getContentPane().add(label_1_2);

   label_1_1_1_1.setHorizontalAlignment(SwingConstants.CENTER);
   label_1_1_1_1.setBounds(399, 22, 65, 15);
   getContentPane().add(label_1_1_1_1);

   label_1_3 = new JLabel();
   label_1_3.setHorizontalAlignment(SwingConstants.CENTER);
   label_1_3.setBounds(281, 22, 75, 15);
   getContentPane().add(label_1_3);
   //
}

public StringBuffer tiqu(String fileName) {
   String mc = "";
   for (int i = fileName.length(); i >= 1; i--) {
    if (fileName.charAt(i - 1) == '/')
     break;
    mc += fileName.charAt(i - 1);
   }
   StringBuffer buffer = new StringBuffer(mc);
   StringBuffer mm = buffer.reverse();
   return mm;
}

public void run() {
   while (fo) {
    label_1_1_1_1.setText((sudu / 1024 / 3) + "KB");
    sudu = 0;
    try {
     Thread.sleep(3000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
}
}

class display implements Runnable {
private static String destUrl;

private static String fileName;

public static void saveToFile(String destUrll, String fileNamee)
    throws IOException {
   destUrl = destUrll;
   fileName = fileNamee;
}

public void run() {
   try {
    boolean DEBUG = true;// 是否输出调试信息
    int BUFFER_SIZE = 10240;// 缓冲区大小
    long zong = 0;
    FileOutputStream fos = null;
    BufferedInputStream bis = null;
    HttpURLConnection httpUrl = null;
    URL url = null;
    DecimalFormat twoDigits = new DecimalFormat("0.00");
    byte[] buf = new byte[BUFFER_SIZE];
    int size = 0;
    // 建立链接
    url = new URL(destUrl);
    httpUrl = (HttpURLConnection) url.openConnection();
    // 连接指定的资源
    long count = Long.parseLong(httpUrl
      .getHeaderField("Content-Length")); // 获取要下载文件的总大小(字节)
    CopyOftest.label_1_2.setText((count / 1024 / 1024) + "M");
    httpUrl.connect();
    // 获取网络输入流
    bis = new BufferedInputStream(httpUrl.getInputStream());
    // 建立文件
    File file = new File(fileName);
    if (!file.exists()) {
     if (!file.getParentFile().exists()) {
      file.getParentFile().mkdirs();
     }
     file.createNewFile();
    }
    fos = new FileOutputStream(fileName);

    // 保存文件
    while ((size = bis.read(buf)) != -1) {
     fos.write(buf, 0, size);
     zong += size;
     CopyOftest.sudu += size;
     CopyOftest.label_1_3.setText(twoDigits
       .format((double) (zong * 100) / count)+"%");
    }
    CopyOftest.fo = false;
    fos.close();
    bis.close();
    httpUrl.disconnect();
   } catch (Exception e) {
    e.printStackTrace();
   }
}

}

你可能感兴趣的:(简易下载器java源码)