展开全部

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. ECharts问题--柱状图和折线图中xAxis.data为空时报错问题解决
  2. phy芯片测试寄存器_PCIe 5.0首秀!7nm IP方案已成熟!PCIe 5.0的芯片设计有多难?...
  3. 启明云端基于sigmastarSSD201/202核心板\开发板资料分享地址,另外还可以加入技术沟通群聊,及时解决相关技术问题!
  4. matlab dsp实验报告,matlab实验报告14.pdf
  5. React之mockjs+sass+生命周期函数
  6. python——学习笔记3
  7. 使用grep -v时候,想去除多个pattern
  8. 这里有众多领域的数据集,然后还有一百万奖金等你来战!
  9. go TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body.
  10. arcgis 属性表中起点终点创建线_【ArcGIS开发】shapefile矢量数据遍历、求交、与属性更新...
  11. 蓝桥杯嵌入式STM32G431——第十二届第一场省赛停车计费系统真题及代码
  12. matlab解薛定谔方程,定态薛定谔方程的MATLAB求解(一)
  13. 【Java】正则表达式分组匹配
  14. Spring Cloud使用Dubbo实现Rpc调用失败之配置错误
  15. 看李佩甫的长篇小说《生命册》的感悟
  16. 为什么会显示贵州云服务器,为什么云服务器都放在贵州
  17. 多边形的单边裁剪算法-JS
  18. 云服务器和普通服务器主要区别有三点
  19. EXCEL文件(xlsx)的读取与data的写入
  20. Git--SSH登录

热门文章

  1. JS PopupAlert
  2. ThinkPHP5.0-多语言切换
  3. java开发之分页查询
  4. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...
  5. 第五章 单例模式(待续)
  6. 2018阿里-研发工程师JAVA Software Engineer, Java
  7. matplotlib 28原则
  8. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
  9. 借教室(codevs 1217)
  10. Linq把一个DataTable根据一列去除重复数据