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();
}
}
}