java如何实现下载_java 如何实现下载功能
展开全部
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 如何实现下载功能相关推荐
- java多线程下载_Java实现多线程下载,支持断点续传
多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内容.虽然实现了多线程及断点续传,但还有很多不完善的地方. 包含四个类: Downloa ...
- jdbc连接mysql数据库驱动下载_Java Jdbc驱动下载配置连接mysql数据库方法代码
1.MySQL JDBC驱动下载 打开上面的下载地址,选择"Platform Independent",然后下载tar.gz或zip格式的都行,之后解压出来得到Jdbc驱动(mys ...
- java上传加密_Java上传下载文件并实现加密解密
使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- java 弹出下载_java如何实现下载弹出的对话框
展开全部 Java实现点击下载32313133353236313431303231363533e58685e5aeb931333337396234文件的时候,弹出"另存为"对话框, ...
- java 打包边下载_JAVA实现边下载边压缩
@ResponseBodypublic voiddownloadUrl(HttpServletResponse response, HttpServletRequest request){ Strin ...
- java socket 读取文件_Java中Socket下载一个文本文件
package com.lanqiao.demo2; import java.io.BufferedInputStream; import java.io.FileInputStream; impor ...
- java 弹出下载_java怎么实现下载弹出的对话框
Java实现点击下载文件的时候,弹出"另存为"对话框,选择保存位置,然后下载,代码如下: public void downLoad(String filePath, HttpSer ...
- java url类下载_Java根据url下载图片或文件的工具类-Fun言
package cn.funyan.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io ...
最新文章
- Azure人工智能认知服务(AI·机器学习)
- 漂亮的电脑倒计时软件_9款实用倒计时软件,统统送你了
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
- Oracle查询和解锁表
- 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
- PHP苹果不给上架,苹果商城上架拒绝
- Python 配置文件之ConfigParser模块(实例、封装)
- Energetically Consistent Invertible Elasticity
- setTimeout和setInteval
- 使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群
- Mac系统功能快速切换状态栏小工具One Switch for Mac
- 列车控制matlab仿真,基于matlab的列车纵向碰撞建模仿真研究
- VC-应用程序正常初始化失败-0xc0150002
- java实现微信公众号官方支付功能
- 玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制
- 学爬虫的动力是啥?那肯定就是爬美女图片了。6千多图片看到爽。
- sci论文、ei论文和ieee论文三者之间有什么区别?
- StreamX 在 Joyme 的生产实践,从遇见到相爱一气呵成
- 微信公众平台微信支付打通流程
- asdfasdfsd阿萨德发撒的发撒的发撒的发