http文件下载

通过http进行文件下载,本实例仅供参考,实际使用效果不太理想。

[文件] FileDownload.java
package com.hongyuan.test;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
 
public class FileDownload {
     
    public static final String LOCAL_PATH="d:/";
     
    public static void main(String[] args) {
        //待下载文件地址
        String fileUrl="http://211.162.55.16/cdn.baidupcs.com/file/6a73dab7c03023a9835cc737f447674d?xcode=af6ffdc43a44169bac968d32c4bd420084a9a97c308112c9&fid=3255571826-250528-130564002&time=1397293108&sign=FDTAXER-DCb740ccc5511e5e8fedcff06b081203-mQkOeRDtXpyQWwYJkI%2BxKJpxn5k%3D&to=cb&fm=N,B,U,nc&newver=1&expires=1397297563&rt=sh&r=854979042&logid=1751715936&sh=1&vuk=3255571826&fn=Web%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%20%E7%AC%AC5%E7%89%88.pdf&wshc_tag=0&wsiphost=ipdbm";
        InputStream in=null;
        OutputStream out=null;
        HttpURLConnection conn=null;
        String fileName=null;
        try {
            //初始化连接
            URL url=new URL(fileUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
             
            //获取文件名
            String disposition=conn.getHeaderField("Content-Disposition");
            if(disposition!=null&&!"".equals(disposition)){
                //从头中获取文件名
                fileName=disposition.split(";")[1].split("=")[1].replaceAll("\"","");
            }else{
                //从地址中获取文件名
                fileName=fileUrl.substring(fileUrl.lastIndexOf("/")+1);
            }
             
            if(fileName!=null&&!"".equals(fileName)){
                //文件名解码
                fileName=URLDecoder.decode(fileName, "utf-8");
            }else{
                //如果无法获取文件名,则随机生成一个
                fileName="file_"+(int)(Math.random()*10);
            }
             
            //读取数据
            if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){
                byte[] buffer=new byte[2048];
                in = conn.getInputStream();
                out=new FileOutputStream(new File(LOCAL_PATH,fileName));
                int count=0;
                int finished=0;
                int size=conn.getContentLength();
                while((count=in.read(buffer))!=-1){
                    if(count!=0){
                        out.write(buffer,0,count);
                        finished+=count;
                        System.out.printf("########################################---->%1$.2f%%\n",(double)finished/size*100);
                    }else{
                        break;
                    }
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                out.close();
                in.close();
                conn.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}