Java多线程下载网页_BLAZAR'的博客-程序员秘密

技术标签: Java  

题目地址:https://www.icourse163.org/learn/PKU-1001941004?tid=1450230441#/learn/hw?id=1222245416

下面的程序可以下载多个网页文件(download方法已写好),请将它改成多线程进行下载(评分占7分),如果可能, 显示计算全部下载完成程序所用的时间(提示:new Date().getTime()可以得到当前时间的毫秒数,评分占3分)。另外,请注意一下,

系统中http:传到平台后,它自动改成了https:,所以请改回http:。  另外,有一些链接访问不了,所以要注意加try...catch。

import java.net.URL;
import java.io.*;
 
class Downloader 
{
    public static void main(String[] args)
        throws Exception
    {
        final URL[] urls = {
            new URL("https://www.pku.edu.cn"),
            new URL("https://www.baidu.com"),
            new URL("https://www.sina.com.cn"),
            new URL("https://www.dstang.com")
        };
        final String[] files = {
            "pku.htm", 
            "baidu.htm",
            "sina.htm", 
            "study.htm",
        };
 
        for(int idx=0; idx<urls.length; idx++){
            try{
                System.out.println( urls[idx] );
                download( urls[idx], files[idx]);
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
    static void download( URL url, String file)
        throws IOException
    {
        try(InputStream input = url.openStream();
            OutputStream output = new FileOutputStream(file))
        {
            byte[] data = new byte[1024];
            int length;
            while((length=input.read(data))!=-1){
                output.write(data,0,length);
            }
        }
    }
}

解答如下:

package week8;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;

public class task1 {

	public static void main(String[] args) throws Exception
	{
		// TODO Auto-generated method stub
		final URL[] urls = {
	            new URL("http://www.pku.edu.cn"),
	            new URL("http://www.baidu.com"),
	            new URL("http://www.sina.com.cn"),
	            new URL("http://www.dstang.com")
	        };
        final String[] files = {
            "pku.htm", 
            "baidu.htm",
            "sina.htm", 
            "study.htm",
        };
        
        Thread [] threadPool = new Thread[urls.length];
        DownloadWeb [] downloadWeb = new DownloadWeb[urls.length];
        
        for(int i=0; i<urls.length; i++)
        {            
            System.out.println( urls[i] );  
            downloadWeb[i] = new DownloadWeb(urls[i],files[i]);
            threadPool[i] = new Thread(downloadWeb[i]);
            threadPool[i].run();
        }
	}

}

class DownloadWeb implements Runnable
{
	URL url;
	String file;
	
	DownloadWeb(URL url, String file)
	{
		this.url = url;
		this.file = file;
	}
	
	public void run()
	{
		long temp = new Date().getTime();
		try
		{
			download(this.url, this.file);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			System.out.printf("下载%s失败\n", file); 
		}
		
		System.out.printf("下载%s花了%dl毫秒\n", file, new Date().getTime() - temp); //long的占位符居然是dl,郁闷死
	}
	
	private void download( URL url, String file) throws IOException
    {
        try(InputStream input = url.openStream();
            OutputStream output = new FileOutputStream(file))
        {
            byte[] data = new byte[1024];
            int length;
            
            while((length=input.read(data))!=-1)
            {
                output.write(data,0,length);
            }
        }
    }
}

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42274148/article/details/105657883

智能推荐

Redis应用详解(三)分布式集群3种架构方案_分布式集群架构_fedorafrog的博客-程序员秘密

1. 集群方案主从高可用(该方案就是单实例形式,只是为了保证数据的安全,对于用户数据少,业务的前期可以采用,目前我司缓存架构就是采用该方案) 客户端分片(典型代表:Jedis。自主写分片算法,代码掌握在自己手中,可控性强,但是需要专业的开发运维人员维护,技术要求和维护成本高) 代理分片(典型代表:Twemproxy,redis集群没有正式推出之前官网推荐的方案,也是目前使用最多的) Redis cluster(3版本推出的集群方案,历时四年之多的开发) Codis集群(豌豆荚15年开源的解决方案

Linux内核(一) [ IMX RK ] TTY-UART驱动框架解析_linux tty框架_Bazinga bingo的博客-程序员秘密

平台:NXP imx6ull 内核版本:4.1.15文章目录一、Linux TTY驱动框架二、Linux Uart驱动框架三、UART相关结构体uart_driver(UART驱动结构体) 、uart_port(UART端口) 、uart_ops(UART操作函数集)四、设备树配置五、串口驱动分析一、Linux TTY驱动框架Linux TTY驱动程序代码位于/drivers/tty下面。TTY整体框架大致分为TTY应用层、TTY文件层、TTY线路规程层、TTY驱动层、TTY设备驱动层。TTY应

关于CSS的一些语法知识_Mintaka_vx的博客-程序员秘密

CSS语法简介CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小、颜色、字体加粗等。如下列代码:p{font-size:12px;color:red;font-weight:bold;}使用CSS样式的一个好处是通过定义某个样式,可以让不同网页位置的文字有着统一的字体、字号或者颜色等。CSS...

5700刀打造3卡1080Ti深度学习机器_weixin_34007886的博客-程序员秘密

人工智豪 AI科技大本营作者 | 人工智豪(ID:Aihows)整理 | AI科技大本营(rgznai100)最近为公司搭建了一台实验用的深度学习主机,在网络上参考了大量的资料,给出了目前最好的配置。本文首先会介绍所有硬件的选择分析,然后介绍深度学习环境搭建流程,最后给出一些简单的性能对比测试。 本文方案定位:适用于预算在5万内,用于深度学习模型研究、开发,需要快速建模验证调参的企业或实验室用户。...

K3s 无法下载镜像 failed to authorize/ failed to fetch anonymous token/ unexpected status/ 401 Unauthorized_咸鱼老罗的博客-程序员秘密

我需要部署公司功能节点进行测试,考虑自己的 mac pro 内存很小只有 16g, k8s 运行需要大量内存,电脑可能要卡死。周边同学推荐装 k3s,它可以看作 k8s 的精简版,删除了 k8s 许多不需要的功能,消耗内存小,适合笔记本运行测试。我通过 mulitupass 安装 k3s,教程,mulitupass 像个虚拟机,设置好内存和硬盘,里面安装k3s,我设置了的是 3g 内存。k3s 上通过 helm 拉取私有库的镜像,一直拉取失败,错误提示显示没有权限,“failed to authorize

安装配置Kerberos_krb5.conf_xiwh的博客-程序员秘密

kerberos简介 Kerberos是一种计算机网络认证协议,此协议可以保护网络实体免受窃听和重复攻击,它允许某实体在非安全网络环境下向另一个实体以一种安全的方式证明自己的身份。Kerberos由麻省理工实验室实现此协议并发布的一套免费软件。其设计主要是针对客户-服务器模型,且提供了一系列交互认证——用户和服务器都能高安全性的验证对方的身份。链接kerber...

随便推点

Apollo(7)集群管理和配置发布原理_apollo指定集群_?abc!的博客-程序员秘密

集群管理在有些情况下,应用有需求对不同的集群做不同的配置,比如部署在A机房的应用连接的RocketMQ服务器地址和部署在B机房的应用连接的RocketMQ服务器地址不一样。另外在项目开发过程中,也可为不同的开发人员创建不同的集群来满足开发人员的自定义配置。创建集群之前的操作都是在默认集群里面,数据也是在默认集群里面在新建的集群中,每一个的namespace都是没有数据的,还是需要自己去创建或关联同步集群配置选择需要同步的配置读取集群配置需要在环境的地方指定集群,之前的

F5-ASM-AdvWAF-防http referer修改(九)_ITdoggg的博客-程序员秘密

1,访问/index.php修改header select*from OPENROWSET(‘SQLOLEDB’)页面会被block查看log,被block原因不演示没有asm情况了,自己对比就好记得还原fiddler修改...

springboot接口请求界面路径返404_handsomepig123_的博客-程序员秘密

目录springboot正常启动项目,访问接口均正常,新增一接口请求界面路径,访问该接口报错404接口没被扫描到配置或代码写法问题最后springboot正常启动项目,访问接口均正常,新增一接口请求界面路径,访问该接口报错404idea springboothttp://localhost:8080/cuer/apSw?ad=2893e6fce42&amp;_=161607509 404接口没被扫描到百度说是接口所在包放置位置不对,导致接口没被扫描到,但是我的情况是系统原本存在的接口都可以访问到

python openpyxl读取excel_python 使用openpyxl读取excel数据_思简的博客-程序员秘密

openpyxl介绍​ openpyxl是一个开源项目,它是一个用于读取/写入Excel 2010文档(如xlsx 、xlsm 、xltx 、xltm文件 )的Python库,如果要处理更早格式的Excel文档(xls),需要用到其它库(如:xlrd、xlwt等),这是openpyxl比较其他模块的不足之处。openpyxl是一款比较综合的工具,不仅能够同时读取和修改Excel文档,而且可以对Ex...

空指针NullPointerException_小崔0082的博客-程序员秘密

HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerExceptiontype Exception reportmessage Request processing failed; nested exception is java.lang.NullPointerExceptiondescription The server encountered an internal er.