java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
/**
* 多线程下载
* @author bing
*
*/
public class OmbDownloadOfThreadsUtil {
private String urlPath ; // 资源网络路径
private String targetFilePath ; // 所下载文件的保存路径
private int threadNum ; // 启用多少条线程进行下载
// 用于下载线程对象集合
private DownloadThread[] downloadThreads ;
// 要下载文件的大小
private int fileSize ;
public OmbDownloadOfThreadsUtil(String urlPath, String targetFilePath,
int threadNum) {
this.urlPath=urlPath;
this.targetFilePath=targetFilePath;
this.threadNum=threadNum;
downloadThreads=newDownloadThread[threadNum] ;
}
public void downloadFile() throws Exception{
URL url=newURL(urlPath) ;
HttpURLConnection conn= (HttpURLConnection) url.openConnection() ;
conn.setConnectTimeout(4*1000) ;
conn.setRequestMethod("GET") ;
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, " +
"application/x-shockwave-flash, application/xaml+xml, " +
"application/vnd.ms-xpsdocument, application/x-ms-xbap, " +
"application/x-ms-application, application/vnd.ms-excel, " +
"application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Charset", "UTF-8");
//设置浏览器类型和版本、操作系统,使用语言等信息
conn.setRequestProperty(
"User-Agent",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; " +
".NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; " +
".NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
//设置为长连接
conn.setRequestProperty("Connection", "Keep-Alive");
//得到要下载文件的大小
fileSize=conn.getContentLength() ;
System.out.println("fileSize:"+fileSize);
//断开连接
conn.disconnect() ;
//计算每条线程需要下载的大小
int preThreadDownloadSize=fileSize/threadNum+1 ;
System.out.println("preThreadDownloadSize:"+preThreadDownloadSize);
RandomAccessFile file=newRandomAccessFile(targetFilePath, "rw") ;
file.setLength(fileSize) ;
file.close() ;
for (int i=0; i
// 计算每条线程下载的起始位置
int startPos=i*preThreadDownloadSize+1 ;
RandomAccessFile currentPart=newRandomAccessFile(targetFilePath, "rw") ;
currentPart.seek(startPos) ;
downloadThreads[i] = new DownloadThread(startPos,preThreadDownloadSize,currentPart) ;
new Thread(downloadThreads[i]).start() ;
}
}
/**
* 获取下载的完成百分比
* @return 完成的百分比
*/
public double getCompleteRate() {
// 统计多条线程已经下载的总大小
int sumSize=0;
for (int i=0; i
sumSize += downloadThreads[i].hasReadLength;
}
// 返回已经完成的百分比
return sumSize * 1.0 / fileSize;
}
/**
* 用于下载的线程
* @author bing
*
*/
private final class DownloadThread implements Runnable{
private int startPos ;
private int preThreadDownloadSize ;
private RandomAccessFile currentPart ;
//已下载长度
private int hasReadLength ;
public DownloadThread(int startPos, int preThreadDownloadSize,
RandomAccessFile currentPart) {
this.startPos=startPos;
this.preThreadDownloadSize=preThreadDownloadSize;
this.currentPart=currentPart;
}
@Override
public void run() {
InputStream inputStream=null;
try{
URL url=newURL(urlPath) ;
HttpURLConnection conn= (HttpURLConnection) url.openConnection() ;
conn.setConnectTimeout(4*1000) ;
conn.setRequestMethod("GET") ;
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, " +
"application/x-shockwave-flash, application/xaml+xml, " +
"application/vnd.ms-xpsdocument, application/x-ms-xbap, " +
"application/x-ms-application, application/vnd.ms-excel, " +
"application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Charset", "UTF-8");
inputStream=conn.getInputStream() ;
inputStream.skip(startPos) ;//定位到开始位置
byte[] buffer=newbyte[1024] ;
int temp=0;
while(hasReadLength
&&(temp=inputStream.read(buffer))!=-1){
currentPart.write(buffer,0,temp) ;
hasReadLength += temp ;
}
}catch(Exception e){
e.printStackTrace() ;
}finally{
try {
currentPart.close() ;
} catch (Exception e) {
e.printStackTrace();
}
try {
inputStream.close() ;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
String songName="许嵩 - 半城烟沙.mp3";
songName=URLEncoder.encode(songName,"UTF-8") ;
String urlPath="http://172.16.2.50:8080/mp3/"+songName ;
String targetDir="E:"+File.separator+songName ;
OmbDownloadOfThreadsUtil odtu=newOmbDownloadOfThreadsUtil(urlPath,targetDir, 6) ;
odtu.downloadFile() ;
}
}
java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...相关推荐
- python3.8.3下载不了nltk_在ubuntu16.04+python3.5情况下安装nltk,以及gensim时pip3安装不成功的解决办法...
在ubuntu16.04+python3.5情况下安装nltk,以及gensim时pip3安装不成功的解决办法,我刚开始因为不太会用linux命令,所以一直依赖于python 的pip命令,可是怎么都 ...
- win10应用商店打不开_首发!打不开苹果应用商店的优质解决办法
App Store 前几期教长给同学们讲到修改 DNS 并不能解决 App Store 无法下载应用的问题,但也并未给出更好的解决办法,但教长是那种吊胃口的人吗,显然不是,琢磨了近两天,终于看到点苗头 ...
- android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...
####问题描述 * java 解析多层含有泛型对象的json数据获取不到泛型类型 * 如果将泛型改成实际的类型就能正常解析 * 如果不改成实际的类型泛型数据被解析成com.google.gson.i ...
- java HelloWorld时报错:“找不到或无法加载主类“问题的解决办法
java HelloWorld时报错:"找不到或无法加载主类"问题的解决办法 参考文章: (1)java HelloWorld时报错:"找不到或无法加载主类"问 ...
- java从github下载项目_在github下载的java项目通过idea打开(全流程图文,傻瓜式)
今天从github把我以前写的一个小demo下载下来了,第一次下载项目,摸索了一个多小时,才运行起来. 下载有两种方法,通过git下载,或者直接压缩包下载,我选的时压缩包下载(因为还没学会git下载 ...
- aaynctask控制多个下载进度_使用 Python 下载的 11 种姿势,一种比一种高级
点击上方"Python编程时光",选择"加为星标"第一时间关注Python技术干货! 原文链接:http://dwz.date/cQjK 在本教程中,你将学习如 ...
- 我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法
我的世界崩溃怎么办?下面吾爱网小编给大家带来我的世界无法正常启动的解决方法,需要的朋友可以参考下. 我的世界作为许多玩家都十分喜爱的模拟经营沙盘类游戏,经常有玩家反映在玩我的世界的时候,游戏总是会出现 ...
- java se13安装教程_在Linux发行版中安装Java 13/OpenJDK 13的方法
本文介绍在Linux发行版Ubuntu 18.04/16.04.Debian 10/9.CentOS 7/8.Fedora 31/30/29中安装Java 13/OpenJDK 13.Java SE ...
- java.policy无法修改_如何配置Policy文件进行Java安全策略的设置
中国人最喜欢访问的网站 只要注册ofo就送你10块钱,还等什么,快来注册吧 Java语言具有完善的安全框架,从编程语言.编译器.解释程序到Java虚拟机,都能确保Java系统不被恶意的代码或敌对的编译 ...
最新文章
- 算法笔记_114:等额本金(Java)
- Teradata收购Think Big Analytics 提升大数据咨询能力
- 监测linux一些重要文件md5值脚本
- 补码、无符号数减法运算
- VC++的windows服务
- ES6(三)——Set、WeakSet、Map、WeakMap
- Hadoop DistCp工具简介及其参数
- 在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。...
- 由“美图秀秀”软件的网站,看网站的生存模式
- 使用Hibernate注解Annotations进行对象映射的异常处理
- 电脑程序无法打开,开机5S后速度变慢,程序无法安装
- Ubuntu下安装Nginx服务器并进行优化
- 统计学习基础:数据挖掘、推理和预测_百度零基础深度学习笔记(三) 波士顿房价预测...
- 【每日算法Day 108】一道简单的二叉树题目,写法还是挺多的。
- Drools workbench kie-server部署和简单使用(全流程
- steam新授权软件_「西米软件推荐」桌面乱七八糟的人,请认真看完
- 【电脑】VirtualBox 安装 Win98 写网页
- C语言中数据的输出格式有哪些?
- EMC与电阻、电容和电感的关系
- Python 获取指定日期是周几 3种方法