`
cuisuqiang
  • 浏览: 3962670 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672050
社区版块
存档分类
最新评论

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

 

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ ! 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

 

不懂的话看这个示例一看就知道各行代码的意思了,因为很简单,图片被写入到了C盘!

8
5
分享到:
评论
14 楼 cuisuqiang 2012-11-16  
kevin_zcwen 写道
java的技术不太懂,不过建议把缓冲区大小改大点8K

为什么用8K?有什么说法吗?
13 楼 cuisuqiang 2012-11-16  
Dick_Li 写道
学习了,可以做到提醒思路的功能

我的初衷就是这么个意思!
12 楼 Dick_Li 2012-11-16  
学习了,可以做到提醒思路的功能
11 楼 kevin_zcwen 2012-11-16  
java的技术不太懂,不过建议把缓冲区大小改大点8K
10 楼 kevin_zcwen 2012-11-16  
图片只有1024byte?
9 楼 wingsrao 2012-11-15  
young7 写道
楼主你有两个重大问题没有解决
1, 如果要使用proxy才能连接怎么办?(proxy)
2, 如果你访问的资源需要身份验证怎么办?(java athenticate )

这个可以有。
8 楼 cuisuqiang 2012-11-15  
这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘了就无从下手!
young7 写道
楼主你有两个重大问题没有解决
1, 如果要使用proxy才能连接怎么办?(proxy)
2, 如果你访问的资源需要身份验证怎么办?(java athenticate )

首先非常感谢你的提问和批评,这个我以后研究一下!再者,我这个博客已经说了:这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘了就无从下手!
7 楼 young7 2012-11-15  
楼主你有两个重大问题没有解决
1, 如果要使用proxy才能连接怎么办?(proxy)
2, 如果你访问的资源需要身份验证怎么办?(java athenticate )
6 楼 cuisuqiang 2012-11-15  
mfkvfn 写道
InputStream不用close?

疏忽了,谢谢提醒!
5 楼 mfkvfn 2012-11-15  
InputStream不用close?
4 楼 cuisuqiang 2012-11-15  
杀手请杀人 写道
org.apache.commons.io.IOUtils的类 还有个FileUtils 都蛮好用的 不需要自己用字节读文件了

apache提供的工具类还是蛮多的,不过感觉还是自己写的好,哈哈哈!
3 楼 杀手请杀人 2012-11-15  
org.apache.commons.io.IOUtils的类 还有个FileUtils 都蛮好用的 不需要自己用字节读文件了
2 楼 cuisuqiang 2012-11-15  
IOUtils
杀手请杀人 写道
我觉得没必要些这么复杂,输入流转成输出流没必要字节转,IOUtils.copy(inStream, fops);一句就好了 我觉得工具比较好 不知道说的对不对

IOUtils是什么类?只要有更好的,说的就是对!
1 楼 杀手请杀人 2012-11-15  
我觉得没必要些这么复杂,输入流转成输出流没必要字节转,IOUtils.copy(inStream, fops);一句就好了 我觉得工具比较好 不知道说的对不对

相关推荐

    java下载网络图片到本地保存

    在Java编程中,下载网络图片并将其保存到本地是一个常见的任务,特别是在开发涉及网页抓取、数据备份或者网络资源管理的项目中。这个过程通常包括以下几个步骤:建立网络连接、发送请求、接收响应数据以及将数据保存...

    java实现将网上页面下载到本地

    在Java编程语言中,我们可以利用HTTP协议来实现从网上下载文件到本地的功能。这个过程涉及到网络编程、IO流处理以及文件操作等知识点。下面将详细解释如何实现这一目标。 首先,我们需要了解HTTP协议,它是互联网上...

    用JAVA实现远程图片批量下载

    ### 使用JAVA实现远程图片批量下载的关键技术点 #### 一、引言 随着互联网的快速发展,用户对于网络资源的需求越来越多样化。其中,批量下载图片的需求尤为显著,尤其是在处理网络相册、电子书籍等内容时。传统的...

    java,jsp读取远程图片到本地服务器

    这样的功能对于确保网站的性能和用户体验至关重要,因为将图片本地化可以减少加载时间,特别是对于大量外部资源的情况。下面我们将详细探讨这个过程涉及的关键知识点。 1. **Java和JSP基础**: Java是一种广泛使用...

    基于java爬取网络图片并且保存到本地

    这个项目“基于Java爬取网络图片并且保存到本地”旨在为初学者提供一个学习实践的机会,了解如何利用Java进行网页抓取和数据处理。 首先,我们需要了解Java爬虫的基础。这通常涉及以下几个关键概念: 1. **HTTP...

    java下载网络图片

    本教程将深入讲解如何使用Java实现多线程下载网络图片,并涉及日志记录和网络速度监控。 首先,我们需要了解HTTP协议,它是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。在Java...

    java从网络上下载图片

    在Java编程环境中,从网络上下载图片是一项常见的任务,尤其在Android开发中更是如此。这个过程涉及到了HTTP请求、流处理、文件操作等多个知识点。以下将详细解释如何使用Java实现这个功能。 首先,我们需要理解...

    基于海康sdk的java程序摄像头实时抓拍图片保存到本地.zip

    标题中的“基于海康sdk的java程序摄像头实时抓拍图片保存到本地”表明这是一个使用海康威视(Hikvision)提供的SDK进行Java编程的项目,目的是实现通过摄像头实时捕获图像并将其保存到本地计算机的功能。这个项目是...

    android studio 保存图片到本地相册

    首先,我们需要获取到网络图片的URL。这可以通过HTTP请求库,如Volley、OkHttp或Retrofit来实现。一旦获取到图片的URL,我们可以使用`java.io`和`android.graphics`包中的类来下载并处理图片。 1. **下载图片** ...

    Java多个文件根据URL下载后打包zip导出.zip

    在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...

    Java下载图片代码+教程

    本文将通过一个简单的示例来介绍如何使用Java语言编写程序来下载指定URL地址的图片。 #### 二、准备工作 为了能够顺利执行Java程序,首先需要确保已经安装了Java开发环境(JDK),并且配置好了环境变量。接下来,...

    JAVA批量下载图片

    当获取到图片URL后,可以创建一个输出流指向本地文件,再创建输入流从网络获取图片数据,然后将数据写入本地文件,完成图片下载。 此外,考虑到批量下载,可能需要实现一个下载队列或者多线程下载策略。Java的并发...

    Java Socket传输图片源代码

    - 一旦连接建立,服务器端创建一个`FileInputStream`读取图片文件,然后将读取到的数据通过`Socket`的输出流发送到客户端。 - 客户端创建`FileOutputStream`,接收来自服务器的输入流数据,并将其写入本地文件,...

    java下载图片文件

    总的来说,Java下载图片或文件涉及到网络编程、输入/输出流操作以及异常处理等多个核心概念,对于理解和实践Java网络应用开发是非常有价值的。通过这个项目,开发者可以学习如何安全、高效地从网络获取并存储数据。

    java springboot 海康威视监控抓拍图片并保存,以及打包

    一旦抓拍到图片,你需要将其保存在本地或者上传到服务器。这通常涉及文件I/O操作,可以使用Java的`java.io.File`和`java.nio.file.Files`类进行处理。 5. **SpringBoot集成**: 在SpringBoot项目中,你可以创建一...

    java实现HTML解析图片批量下载

    总之,通过使用Jsoup,我们可以轻松地解析HTML文档,找到所有的图片链接,并使用Java的网络和文件I/O功能将它们下载到本地。这个项目不仅可以作为学习Java网络编程和HTML解析的实践,还可以应用于各种实际场景,例如...

    java下载图片

    标题"java下载图片"和描述中提到的方法,是通过网络地址抓取图片,然后在服务器上临时存储,最后通过网页中的超链接(a标签)供客户端下载。 首先,我们来看核心知识点——如何在Java中下载图片。这通常涉及到使用`...

    JAVA自动扫描网络上的图片并下载(线程)

    在Java编程中,"JAVA自动扫描网络上的图片并下载(线程)"是一个常见的网络爬虫应用,它利用了HTTP协议来获取网页上的图片资源,并通过多线程技术提高下载效率。这个程序的主要知识点包括以下几个部分: 1. **HTTP...

    基于QT,通过http/https开头的url下载图片的源代码

    当接收到数据时,我们将数据写入到本地文件中,并更新进度条: ```cpp void downloadProgress(qint64 received, qint64 total) { // 更新进度条 double progress = static_cast(received) / total; // ... } ...

    java 模仿网络快车下载工具下载文件

    在Java编程语言中,模拟网络快车(FlashGet)这样的多线程下载工具是一项挑战性的任务,因为它涉及到网络I/O操作、多线程处理以及文件分块下载等复杂技术。以下将详细介绍如何实现这一功能。 首先,理解网络快车的...

Global site tag (gtag.js) - Google Analytics