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();
}
}
}