通过Java HTTP连接将网络图片下载到本地
通过Java HTTP连接将网络图片下载到本地
只知道浏览器使用的是HTTP协议,那么如何将网络资源使用JavaHTTP下载下来呢!
这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘了就无从下手!
示例创建HttpURLConnection网络连接,并将这个连接获得的网络数据流写道本地磁盘!
第一种方法:
示例代码如下:
- package imageView;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- /**
- * @说明 从网络获取图片到本地
- * @author 崔素强
- * @version 1.0
- * @since
- */
- public class GetImage {
- /**
- * 测试
- * @param args
- */
- public static void main(String[] args) {
- String url = "http://www.baidu.com/img/baidu_sylogo1.gif";
- byte[] btImg = getImageFromNetByUrl(url);
- if(null != btImg && btImg.length > 0){
- System.out.println("读取到:" + btImg.length + " 字节");
- String fileName = "百度.gif";
- writeImageToDisk(btImg, fileName);
- }else{
- System.out.println("没有从该连接获得内容");
- }
- }
- /**
- * 将图片写入到磁盘
- * @param img 图片数据流
- * @param fileName 文件保存时的名称
- */
- public static void writeImageToDisk(byte[] img, String fileName){
- try {
- File file = new File("C:\\" + fileName);
- FileOutputStream fops = new FileOutputStream(file);
- fops.write(img);
- fops.flush();
- fops.close();
- System.out.println("图片已经写入到C盘");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 根据地址获得数据的字节流
- * @param strUrl 网络连接地址
- * @return
- */
- public static byte[] getImageFromNetByUrl(String strUrl){
- try {
- URL url = new URL(strUrl);
- HttpURLConnection conn = (HttpURLConnection)url.openConnection();
- conn.setRequestMethod("GET");
- conn.setConnectTimeout(5 * 1000);
- InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
- byte[] btImg = readInputStream(inStream);//得到图片的二进制数据
- return btImg;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 从输入流中获取数据
- * @param inStream 输入流
- * @return
- * @throws Exception
- */
- public static byte[] readInputStream(InputStream inStream) throws Exception{
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while( (len=inStream.read(buffer)) != -1 ){
- outStream.write(buffer, 0, len);
- }
- inStream.close();
- return outStream.toByteArray();
- }
- }
不懂的话看这个示例一看就知道各行代码的意思了,因为很简单,图片被写入到了C盘!
第二种方法:
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.URL;
- import java.net.URLConnection;
- public class DownloadImage {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- download("http://ui.51bi.com/opt/siteimg/images/fanbei0923/Mid_07.jpg", "51bi.gif","c:\\image\\");
- }
- public static void download(String urlString, String filename,String savePath) throws Exception {
- // 构造URL
- URL url = new URL(urlString);
- // 打开连接
- URLConnection con = url.openConnection();
- //设置请求超时为5s
- con.setConnectTimeout(5*1000);
- // 输入流
- InputStream is = con.getInputStream();
- // 1K的数据缓冲
- byte[] bs = new byte[1024];
- // 读取到的数据长度
- int len;
- // 输出的文件流
- File sf=new File(savePath);
- if(!sf.exists()){
- sf.mkdirs();
- }
- OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename);
- // 开始读取
- while ((len = is.read(bs)) != -1) {
- os.write(bs, 0, len);
- }
- // 完毕,关闭所有链接
- os.close();
- is.close();
- }
- }
通过Java HTTP连接将网络图片下载到本地的更多相关文章
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- (14)[Xamarin.Android] 异步的网络图片下载
原文 [Xamarin.Android] 异步的网络图片下载 在设计要从网络上接大量数据并且显示在Android Listview中,而这些资料是利用Json格式传送并且数据中包含这图片档案. 那在X ...
- CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- java项目连接jdbc报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server
java项目连接jdbc报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not creat ...
- java读取网页图片路径并下载到本地
java读取网页图片路径并下载到本地 最近公司需要爬取一些网页上的数据,自己就简单的写了一个demo,其中有一些数据是图片,需要下载下来到本地并且 将图片的路径保存到数据库,示例代码如下: packa ...
- 虚拟机centos 安装 redis 环境 linux 使用 java 远程连接 redis
redis官网地址:http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget ...
- Java-Runoob-高级教程:Java MySQL 连接
ylbtech-Java-Runoob-高级教程:Java MySQL 连接 1.返回顶部 1. Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL ...
- Redis02 Redis客户端之Java、连接远程Redis服务器失败
1 查看支持Java的redis客户端 本博文采用 Jedis 作为redis客户端,采用 commons-pool2 作为连接redis服务器的连接池 2 下载相关依赖与实战 2.1 到 Repos ...
- 使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载
使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载 2018年06月07日 10:42:26 守望dfdfdf 阅读数:235 标签: jav ...
随机推荐
- java-乘法口诀表。(新手)
//创建的一个包名. package qige; //定义一个类. public class KJ { //公共静态的一个主方法. public static void main(String[] a ...
- Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现
影响版本 Apache Shiro <= 1.2.4 产生原因 shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cook ...
- hdu1181 dfs 字符串首尾可拼接,问是否可寻找到一条字串路径使得首尾分别是‘b’和‘m’,简单的搜索+回溯
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- SpringCloud系列之服务注册发现(Eureka)应用篇
@ 目录 前言 项目版本 Eureka服务端 Eureka客户端 服务访问 前言 大家好,距离上周发布的配置中心基础使用已过去差不多一周啦,趁着周末继续完善后续SpringCloud组件的集成,本次代 ...
- MongoDB操作符之$elemMatch
问题 如果MongoDB 数据库集合中仅存在一条记录 { "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), " ...
- python win32com
要使用Python控制MS Word,您需要先安裝win32com套件,這個套件可以到 http://sourceforge.net/projects/pywin32/ 找到.本文假設您已經正確安裝w ...
- PyTorch专栏开篇
目前研究人员正在使用的深度学习框架不尽相同,有 TensorFlow .PyTorch.Keras等.这些深度学习框架被应用于计算机视觉.语音识别.自然语言处理与生物信息学等领域,并获取了极好的效果. ...
- HDU - 3068 最长回文manacher马拉车算法
# a # b # b # a # 当我们遇到回判断最长回文字符串问题的时候,若果用暴力的方法来做,就是在字符串中间添加 #,然后遍历每一个字符,找到最长的回文字符串.那么马拉车算法就是在这个基础上进 ...
- Centos 8 上安装 Consul
/* 1. 下载二进制安装文件 */下载地址:https://www.consul.io/downloads.html /* 2. 解压缩安装包 */unzip consul_1.6.2_linux_ ...
- Java中的集合类、Lambda、鲁棒性简述
集合类 在java.util包中提供了一些集合类,常用的有List.Set和Map类,其中List类和Set类继承了Collection接口.这些集合类又称为容器,长度是可变的,数组用来存放基本数据类 ...