package com.app.io; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; /** * @说明 从网上抓取图片保存到到本地 * @Version 1.0 */ @SuppressWarnings("all") public class Test2 { /** * 测试 * @param args */ public static void main(String[] args) { getImages(); String path1 = "D:/test"; File fromFile = new File(path1);// 源文件夹 fileRename(fromFile, "Img"); } /** * 将抓取的图片重命名 * @param fileDir * @param sequenceCode */ public static void fileRename(File fileDir, String sequenceCode) { File[] files = fileDir.listFiles(); for (int k = 0; k < files.length; k++) { StringBuffer buffer = new StringBuffer(sequenceCode); if (files[k].isDirectory()) { fileRename(files[k], sequenceCode); } else { if (k < 10) buffer.append("_000").append(k).append(".png"); else if (k >= 10 && k < 100) buffer.append("_00").append(k).append(".png"); else if (k < 1000 && k >= 100) buffer.append("_0").append(k).append(".png"); else buffer.append("_").append(k).append(".png"); final int index = files[k].getName().lastIndexOf(".") + 1; final String fileType = files[k].getName().substring(index); buffer.append(".").append(fileType); final String name = buffer.toString(); int lastIndex=name.lastIndexOf(".");//[Ljava.lang.String;@141d683找到最后的一个.将它重命名 String ImgName=name.substring(0, lastIndex); final File dirFile = new File(fileDir, ImgName); System.out.println("Rename File Path:"+ files[k].getAbsolutePath()); files[k].renameTo(dirFile); } } } /** * 从网上抓取图片内容 * 对一张图片作抓取 * 如果有多张图片可以for */ private static void getImages(){ String url="http://e.hiphotos.baidu.com/pic/w%3D310/sign=ef8237b59345d688a302b4a594c37dab/024f78f0f736afc3554ec1e3b219ebc4b64512f1.jpg"; byte[] btImg = getImageFromNetByUrl(url); if(null != btImg && btImg.length > 0){ System.out.println("读取到:" + btImg.length + " 字节"); String fileName = ""; writeToDisk(btImg, fileName); }else{ System.err.println("没有从该连接获得内容"); } } /** * 将图片写入到磁盘 * @param img 图片数据流 * @param fileName 文件保存时的名称 */ private static void writeToDisk(byte[] img, String ...fileName){ try { File file = new File("d:/test/" + fileName); FileOutputStream fops = new FileOutputStream(file); fops.write(img); fops.flush(); fops.close(); System.out.println("图片已经写入到D盘"); } catch (Exception e) { e.printStackTrace(); } } /** * 根据地址获得数据的字节流 * @param strUrl 网络连接地址 * @return */ private static byte[] getImageFromNetByUrl(String strUrl){ try { InputStream inStream=null; /** * 方法一 URL url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); inStream = conn.getInputStream();//通过输入流获取图片数据 byte[] btImg = readStream(inStream);//得到图片的二进制数据 return btImg; */ /** * *方法二 HttpClient*/ HttpClient client=new HttpClient(); GetMethod method=new GetMethod(strUrl);//获取内容用GetMethod,经过测试PostMethod拿不到图片的内容 int status=client.executeMethod(method); method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8"); //设置编码 if(status==HttpStatus.SC_OK){ inStream=method.getResponseBodyAsStream(); byte[] btImg = readStream(inStream);//得到图片的二进制数据 return btImg; }else{ System.err.println("网络异常"); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从输入流中获取数据 * @param inStream 输入流 * @return * @throws Exception */ private static byte[] readStream(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(); } }
相关推荐
Jsoup+httpclient模拟登陆和抓取页面.pdf
从网络获取数据和图片,用gson解析并用listview展示
- 修改HTML文档中的链接、脚本路径和图片路径等,确保资源的正确加载。 5. HTML文档处理: - 通过Jsoup的Document类加载HTML文档,可以是从文件、字符串或者URL地址加载。 - 使用Jsoup的API选择和操作文档中的...
在IT领域,网络数据抓取是一项重要的技能,它允许我们从网页中提取所需的信息,用于数据分析、内容聚合或自动化任务。HttpClient和Jsoup是两个Java库,分别专注于HTTP通信和HTML解析,它们常被组合使用来高效地抓取...
常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **HttpURLConnection** HttpURLConnection是Java标准库提供的类,自Android 2.3(API级别9...
android HttpClient 获取网络图片 实例
NULL 博文链接:https://xiaowei-qi-epro-com-cn.iteye.com/blog/1973295
在IT领域,网络爬虫是获取网页数据的重要手段,而HttpClient和Jsoup是两种常用的Java库,用于实现这一目的。HttpClient提供了低级别的HTTP通信能力,而Jsoup则是一个解析和操作HTML文档的强大工具。本教程将详细介绍...
HttpURLConnection与HttpClient的区别: HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大。 HttpURLConnection是java的标准类,可以...
总结,通过HTTPURLConnection从网络获取图片涉及了网络连接、HTTP请求与响应、流操作以及图片处理等多个知识点。理解并掌握这些细节对于任何需要网络通信的项目都是至关重要的。在实践中,还需要结合具体场景和需求...
总之,HttpClient和HtmlParser结合使用,可以构建一个基础的网络爬虫,用于抓取和解析网页数据。它们提供了一种有效的方式,让开发者能够轻松地与Web服务器交互,并处理返回的HTML内容,从而实现各种Web数据挖掘和...
在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 首先,你需要在项目中引入HttpClient的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....
HttpURLConnection请求和HttpClient请求...................................................................
在本文中,我们将深入探讨HttpClient 4.3.3版本,它是HTTPComponents项目的一部分,提供了丰富的功能和优化的性能,广泛应用于网络抓包、API调用等场景。 一、HttpClient简介 HttpClient是Apache软件基金会的一个...
在Android应用开发中,进行网络通信是常见的任务,其中两种主要的请求方式是使用`HttpURLConnection`和`HttpClient`。虽然两者都能实现HTTP通信,但它们在功能、使用方式和性能上存在一些区别。 首先,Apache ...
在Java编程中,`HttpURLConnection`是用于处理HTTP协议的核心类,它提供了向网络资源发起...`HttpURLConnection`虽然简洁,但在高级功能上可能需要结合其他库,如OkHttp或Apache HttpClient,以实现更高效的网络通信。
在本场景中,我们关注的是"httpClient post 上传图片"以及"下载图片"的操作。下面将详细介绍如何使用HttpClient进行图片的上传和下载,并探讨如何修改上传和下载的URI。 1. **HttpClient上传图片**: - 首先,我们...
在本篇文章中,我们将深入探讨如何使用Java HttpClient来抓取网页数据以及如何打包成jar文件。 **一、Java HttpClient简介** Java HttpClient 是 Apache HttpClient 库的一部分,它提供了丰富的功能,包括连接管理...