本帖最后由 张向辉 于 2013-1-25 09:41 编辑
今天写了个java 单线程下载文件的GUI程序,效果图如下:
比如我想下载一个网页图片,输入图片地址,下载下来的图片打开什么都看不到,这是什么原因呢?
这是代码:
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class SingleThreadDownload extends JFrame implements ActionListener{
public SingleThreadDownload(){
panel.setLayout(new FlowLayout());
label2.setFont(new Font("雅黑", Font.BOLD, 15));
panel.add(label2);
panel.add(urlField);
panel.add(StartButton);
panel.add(resetButton);
panel.add(exitButton);
setContentPane(panel);
StartButton.addActionListener(this);
resetButton.addActionListener(this);
exitButton.addActionListener(this);
setSize(400, 150);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//下载url资源
public void download(String address) throws Exception{
URL url = new URL(address);//
URLConnection urlcon = url.openConnection();//打开连接
urlcon.connect();//连接url资源
InputStream in = urlcon.getInputStream();//从连接中获取输入流
String filePath = url.getFile();//得到下载的文件路径
int pos = filePath.lastIndexOf("/");
String fileName = filePath.substring(pos + 1);//得到下载文件名
FileOutputStream out = new FileOutputStream("D:\\" + fileName);//保存下载文件的路径
byte[] bytes = new byte[1024];
int len = in.read();
while(len != -1){
out.write(bytes, 0, len);//每次读取1024个字节数据写入输出流
len = in.read();
}
out.close();//关闭输出流
in.close();//关闭输入流
JOptionPane.showMessageDialog(this, "下载完毕");
}
public static void main(String[] args){
new SingleThreadDownload();
}
private final JPanel panel = new JPanel();
private final JLabel label2 = new JLabel("输入网络资源的网址:");
JButton StartButton = new JButton("点击开始下载");
JButton resetButton = new JButton("清空");
JButton exitButton = new JButton("退出");
JTextField urlField = new JTextField(20);
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource() == StartButton){
if("".equals(urlField.getText())){
JOptionPane.showMessageDialog(this, "请输入资源地址");
}
String url = urlField.getText();
try{
download(url);
}catch(Exception e1){
JOptionPane.showMessageDialog(this, "资源地址有误,请检查,谢谢!");
e1.printStackTrace();
}
}else if(e.getSource() == resetButton){
urlField.setText("");
}else{
System.exit(0);
}
}
}
|
|