java使用http实现文件下载学习示例

所属分类: 软件编程 / java 阅读数: 104
收藏 0 赞 0 分享

复制代码 代码如下:

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

更多精彩内容其他人还在看

Java实现一个简单的文件上传案例示例代码

这篇文章主要介绍了Java实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在spring中使用JdbcTemplate操作数据库的几种方式

这篇文章主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java中的switch case语句使用详解

这篇文章主要介绍了java中的switch case语句使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

深入理解Java 线程池

这篇文章主要介绍了Java 线程池的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解mybatis #{}和${}的区别、传参、基本语法

这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

这篇文章主要介绍了MyBatis 中 ${}和 #{}的正确使用方法,本文给大家提到了MyBatis 中 ${}和 #{}的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Mybatis中的 ${} 和 #{}区别与用法

这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Maven安装过程图文详解

这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

SpringBoot登录拦截配置详解(实测可用)

这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 内存溢出案例汇总

这篇文章主要介绍了JAVA 内存溢出案例的汇总,文中讲解非常细致,帮助各位工作学习时避免内存溢出,感兴趣的朋友可以了解下
收藏 0 赞 0 分享
查看更多