欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IO流【7】--- 通过IO流实现网络资源下载,通过URL地址下载图片等

程序员文章站 2022-05-06 14:13:30
...

IO流【7】— 通过IO流实现网络资源下载,通过URL地址下载图片等
只要有URL地址,就能通过URL地址找到并下载
【示例】

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

/**
 *从网络下载资源到本地
 *步骤:1 定义URL,创建URL对象
	    2 打开URL对应的输入管道
	    3 使用输入管道读取URL的数据,使用内存流(ByteArrayOutputStream)接收URL的数据
	    4  网络URL的数据最终变成   byte[]
	    5  将内存流的数据写入到本地磁盘
 */
public class DownResource {
	public static void main(String[] args) {
		//1定义url
		String urlPath = "https://www.baidu.com/img/dong_7d4baac2f4dee0fab1938d2569f42034.gif";
		try {
			//2创建URL对象
			URL url = new URL(urlPath);
			//打开URL对应的输入管道
			try(InputStream in = url.openStream();
					//内存流用来存储URL的数据
				ByteArrayOutputStream out = new ByteArrayOutputStream();	
					//带有缓冲区的磁盘输出管道,唯一职责将内存流的字节数组写入到本地磁盘
				BufferedOutputStream bos = 
						new BufferedOutputStream(
								new FileOutputStream("logo.gif"))
					){
				byte [] buf= new byte[1024];
				int length = 0;
				//使用URL的输入管道,读取URL的数据
				while((length = in.read(buf))!=-1) {
					//内存流写入url读取的数据
					out.write(buf,0,length);
				}
				out.flush();
				//out.toByteArray()里面存放了百度LOGO的字节数组
				//bos.write(out.toByteArray());内存流数据写入本地磁盘
				bos.write(out.toByteArray());
				bos.flush();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}