展开全部

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.RandomAccessFile;

import java.net.HttpURLConnection;

import java.net.ProtocolException;

import java.net.URI;

import java.net.URL;

import java.util.Random;

/**

*

* 实现了下载62616964757a686964616fe58685e5aeb931333332613662的功能*/

public class SimpleTh {

public static void main(String[] args){

// TODO Auto-generated method stub

//String path = "http://www.7cd.cn/QingTengPics/倩女幽魂.mp3";//MP3下载的地址

String path ="http://img.99luna.com/music/%CF%EB%C4%E3%BE%CD%D0%B4%D0%C5.mp3";

try {

new SimpleTh().download(path, 3); //对象调用下载的方法

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static String getFilename(String path){//获得文件的名字

return path.substring(path.lastIndexOf('/')+1);

}

public void download(String path,int threadsize) throws Exception//下载的方法

{//参数 下载地址,线程数量

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();//获取HttpURLConnection对象

conn.setRequestMethod("GET");//设置请求格式,这里是GET格式

conn.setReadTimeout(5*1000);//

int filelength = conn.getContentLength();//获取要下载文件的长度

String filename = getFilename(path);

File saveFile = new File(filename);

RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");

accessFile.setLength(filelength);

accessFile.close();

int block = filelength%threadsize ==0?filelength/threadsize:filelength/threadsize+1;

for(int threadid = 0;threadid<=threadsize;threadid++){

new DownloadThread(url,saveFile,block,threadid).start();

}

}

private final class DownloadThread extends Thread{

private URL url;

private File saveFile;

private int block;//每条线程下载的长度

private int threadid;//线程id

public DownloadThread(URL url,File saveFile,int block,int threadid){

this.url = url;

this.saveFile= saveFile;

this.block = block;

this.threadid = threadid;

}

@Override

public void run() {

//计算开始位置的公式:线程id*每条线程下载的数据长度=?

//计算结束位置的公式:(线程id+1)*每条线程下载数据长度-1=?

int startposition = threadid*block;

int endposition = (threadid+1)*block-1;

try {

try {

RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");

accessFile.seek(startposition);//设置从什么位置写入数据

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestMethod("GET");

conn.setReadTimeout(5*1000);

conn.setRequestProperty("Range","bytes= "+startposition+"-"+endposition);

InputStream inStream = conn.getInputStream();

byte[]buffer = new byte[1024];

int len = 0;

while((len = inStream.read(buffer))!=-1){

accessFile.write(buffer, 0, len);

}

inStream.close();

accessFile.close();

System.out.println("线程id:"+threadid+"下载完成");

} catch (FileNotFoundException e) {

e.printStackTrace();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

参考一下这个代码。

java如何实现下载_java 如何实现下载功能相关推荐

  1. java多线程下载_Java实现多线程下载,支持断点续传

    多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内容.虽然实现了多线程及断点续传,但还有很多不完善的地方. 包含四个类: Downloa ...

  2. jdbc连接mysql数据库驱动下载_Java Jdbc驱动下载配置连接mysql数据库方法代码

    1.MySQL JDBC驱动下载 打开上面的下载地址,选择"Platform Independent",然后下载tar.gz或zip格式的都行,之后解压出来得到Jdbc驱动(mys ...

  3. java上传加密_Java上传下载文件并实现加密解密

    使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...

  4. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  5. java 弹出下载_java如何实现下载弹出的对话框

    展开全部 Java实现点击下载32313133353236313431303231363533e58685e5aeb931333337396234文件的时候,弹出"另存为"对话框, ...

  6. java 打包边下载_JAVA实现边下载边压缩

    @ResponseBodypublic voiddownloadUrl(HttpServletResponse response, HttpServletRequest request){ Strin ...

  7. java socket 读取文件_Java中Socket下载一个文本文件

    package com.lanqiao.demo2; import java.io.BufferedInputStream; import java.io.FileInputStream; impor ...

  8. java 弹出下载_java怎么实现下载弹出的对话框

    Java实现点击下载文件的时候,弹出"另存为"对话框,选择保存位置,然后下载,代码如下: public void downLoad(String filePath, HttpSer ...

  9. java url类下载_Java根据url下载图片或文件的工具类-Fun言

    package cn.funyan.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io ...

最新文章

  1. Azure人工智能认知服务(AI·机器学习)
  2. 漂亮的电脑倒计时软件_9款实用倒计时软件,统统送你了
  3. 最短路径 - 迪杰斯特拉(Dijkstra)算法
  4. Oracle查询和解锁表
  5. 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
  6. PHP苹果不给上架,苹果商城上架拒绝
  7. Python 配置文件之ConfigParser模块(实例、封装)
  8. Energetically Consistent Invertible Elasticity
  9. setTimeout和setInteval
  10. 使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群
  11. Mac系统功能快速切换状态栏小工具One Switch for Mac
  12. 列车控制matlab仿真,基于matlab的列车纵向碰撞建模仿真研究
  13. VC-应用程序正常初始化失败-0xc0150002
  14. java实现微信公众号官方支付功能
  15. 玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制
  16. 学爬虫的动力是啥?那肯定就是爬美女图片了。6千多图片看到爽。
  17. sci论文、ei论文和ieee论文三者之间有什么区别?
  18. StreamX 在 Joyme 的生产实践,从遇见到相爱一气呵成
  19. 微信公众平台微信支付打通流程
  20. asdfasdfsd阿萨德发撒的发撒的发撒的发

热门文章

  1. 先验信息,先验概率,先验分布,后验概率,后验分布,共轭分布,共轭先验分布
  2. linux jdk路径
  3. 扎实基础深入篇(七):函数和类没那么复杂
  4. bzoj千题计划290:bzoj3143: [Hnoi2013]游走
  5. javascript如何处理多级的实时监听
  6. 从零开始学 Java - Spring AOP 拦截器的基本实现
  7. java 符号引用与直接引用
  8. R语言-实用功能性语句1
  9. 虚拟机centos6.5 --安装jdk
  10. 原型模式(Prototype) 1