博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
09_多线程下载_获取文件长度&计算下载范围
阅读量:4881 次
发布时间:2019-06-11

本文共 2399 字,大约阅读时间需要 7 分钟。


package com.itheima.multiThreadDownload;//import java.net.MalformedURLException;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;//import java.net.URLConnection;public class MultiThreadDownload {     private static String path = "http://127.0.0.1:8080/FeiQ.exe";     private static int threadCount= 3;//不搞那么多就搞三个线程.     public static void main(String[] args) {        //①联网获取要下载的文件长度        try {            URL url = new URL(path);            //URLConnection openConnection = url.openConnection();            HttpURLConnection openConnection = (HttpURLConnection) url.openConnection();            openConnection.setRequestMethod("GET");            openConnection.setConnectTimeout(10000);            int responseCode = openConnection.getResponseCode();            if(responseCode==200){                //获取要下载的文件长度                //int contentLength = openConnection.getContentLength();                //long contentLengthLong = openConnection.getContentLengthLong();                int contentLength = openConnection.getContentLength();                //在本地创建一个一样的文件                RandomAccessFile file = new RandomAccessFile(getFilename(path), "rw");//第一个叫file或者说是name(路径),第二个参数叫mode                //名字可以通过路径去获取,截取这个路径最后一个斜杠.剩下的这个就是我要下载的文件名                //file.setLength(contentLengthLong);//文件创建出来之后去设置文件的长度                file.setLength(contentLength);//文件创建出来之后去设置文件的长度                //计算每一个线程要下载多少数据                //int blockSize = contentLengthLong/threadCount;                int blockSize = contentLength/threadCount;                //计算每一个线程要下载的数据范围                for (int i = 0; i < threadCount; i++) {                    //用i和blockSize来确定startIndex和endIndex                    int startIndex  = i*blockSize;                     int endIndex = (i+1)*blockSize-1;                    if(i==threadCount-1){                        //说明是最后一个线程                        endIndex = contentLength-1;                    }                }            }        } //catch (MalformedURLException e) {
catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static String getFilename(String path) { String[] split = path.split("/");//拿斜杠去切 return split[split.length-1]; }}

 

 


接下来得创建多个线程,在多线程里面去创建不同的数据。

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7076494.html

你可能感兴趣的文章
H3C 广域网连接方式
查看>>
H3C ISDN网络构成
查看>>
python 别名
查看>>
oracle Transactional
查看>>
oracle显示和设置环境变量
查看>>
【美国总统电台演说】2011-06-04
查看>>
properties文件导出
查看>>
让git记住账号和密码
查看>>
生成汉字首写大字母-简缩字母
查看>>
【项目】 技术选型 - 平台和语言
查看>>
iOSApp上下有黑边
查看>>
20170906 - XML基础 - Q
查看>>
html让没有宽高限制的图片居中
查看>>
phpStudy中起用lua脚本
查看>>
钉钉开发系列(八)二维码扫描登录的实现
查看>>
android studio
查看>>
Linux简介和安装
查看>>
微信公众平台开发(86) 获取用户基本信息
查看>>
C#开发之反射的简单使用
查看>>
MSSQL重拾记录
查看>>