JAVA IO流 获取网页内容
2018-03-13 22:30
381 查看
在Android音乐项目中:
获取Json字符串,由于json字符串显示在页面上,所以需要获取网页显示的内容。
基本思路如上。
其第二种demo:
在java中做的测试,比较全面。package io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class TestByteArrayOutputStream {
public static void main(String[] args) throws IOException {
//打开某文件,转换成字节输入流之后返回
InputStream inputStream = readFile();
//将获取到的字节流作为参数输入,期待返回其字节流的字节数组
byte[] data = readInputStream(inputStream);
//将得到的字节数组转换成String类型,并以GBK编码方式编码
String html = new String(data, "GBK");
//将结果进行输出
System.out.println("结果:--->"+html);
}
public static byte[] readInputStream(InputStream inStream) throws IOException{
System.out.println("进入readInputStream ok");
//生成输出字节数组对象
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//新建缓冲字节数组
byte[] buffer = new byte[2];
//缓冲区数组偏移量len
int len = 0;
/*
* 1.从输入流中读取某大小的字节
* 2.将读取的字节存入buffer缓冲区中
* 3.返回每个字节翻译成字符后的字符的个数
* 4.判断是否到末尾
*/
while((len = inStream.read(buffer))!=-1){
System.out.println("len--->"+len);
System.out.println("buffer[0]--->"+buffer[0]);
System.out.println("buffer[1]--->"+buffer[1]);
/*
* 将缓冲区buffer,按从偏移量0开始,直到len长度这一块的数据
* 写入byteArrayOutputStream中
*/
byteArrayOutputStream.write(buffer,0,len);
}
System.out.println("size--->"+inStream.available());
//使用完成io操作,关闭资源
inStream.close();
//返回字节数组输出流的字节数组
return byteArrayOutputStream.toByteArray();
}
//获取流对象
public static InputStream readFile(){
System.out.println("进入readFile ok");
FileInputStream fis =null;
String result = "";
try {
//根据路径实例化一个输入流对象
fis = new FileInputStream("D://hello.txt");
//返回这个输入流对象可以被读的剩下的bytes字节的估计值
//int size = fis.available();
//System.out.println("readFile size--->"+size);
/*//根据输入流的字节数size创建字节数组
byte[] array = new byte[size];
//将数据读入字节数组中
fis.read(array);
//将字节数组转化成String字符串
result = new String(array);*/
//System.out.println("readFile size--->"+fis.available());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("退出readFile ok");
return fis;
}
}
基本理解了其概念,熟能生巧,期待以后能多次使用IO流。
获取Json字符串,由于json字符串显示在页面上,所以需要获取网页显示的内容。
基本思路如上。
public class HtmlService { public static String getHtml(String path) throws Exception { //将path转换为URL格式 URL url = new URL(path); //打开Http链接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求方式为GET conn.setRequestMethod("GET"); //设置连接超时时间 conn.setConnectTimeout(5 * 1000); //通过conn获取输入流(字节流)---inStream InputStream inStream = conn.getInputStream(); //将readInputStream返回的字节数组存入data中 byte[] data = readInputStream(inStream); //通过new String的方法。并设置utf-8的编码方式,转换为String类型 String html = new String(data, "UTF-8"); //将获取到的String类型的html返回 return html; } public static byte[] readInputStream(InputStream inStream) throws Exception{ //转换成字节数组 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); //新建缓冲字节数组 byte[] buffer = new byte[1024]; int len = 0; /* JDK解释:read(Byte []b)一个参数 从输入流中读取一定量的字节,将其存入缓冲区数组buffer中 以整数形式返回其实际读取的字节数。 如果b的长度为0,或者不读取任何字节,则返回为0; 否则,尝试读取至少一个字节。 如果,流位于末尾而没有可用字节,则返回为-1; 否则,至少读取一个字节并将其存储在 b 中。 将读取的第一个字节存入buffer[0]中, 下一个存入buffer[1]中,以此类推。 读取的字节数最多等于buffer的长度。 */ while( (len=inStream.read(buffer)) != -1 ){ //每次读取8个字节作为一次循环 //将这8个字节存入的数组buffer作为参数 //写入outStream中 //将指定的byte数组从偏移量off开始的len个字节写入此输出流 outStream.write(buffer, 0, len); } //字节流操作之后,将资源关闭 inStream.close(); //将获得的outStream转换为字节数组,并返回 return outStream.toByteArray(); } }
其第二种demo:
在java中做的测试,比较全面。package io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class TestByteArrayOutputStream {
public static void main(String[] args) throws IOException {
//打开某文件,转换成字节输入流之后返回
InputStream inputStream = readFile();
//将获取到的字节流作为参数输入,期待返回其字节流的字节数组
byte[] data = readInputStream(inputStream);
//将得到的字节数组转换成String类型,并以GBK编码方式编码
String html = new String(data, "GBK");
//将结果进行输出
System.out.println("结果:--->"+html);
}
public static byte[] readInputStream(InputStream inStream) throws IOException{
System.out.println("进入readInputStream ok");
//生成输出字节数组对象
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//新建缓冲字节数组
byte[] buffer = new byte[2];
//缓冲区数组偏移量len
int len = 0;
/*
* 1.从输入流中读取某大小的字节
* 2.将读取的字节存入buffer缓冲区中
* 3.返回每个字节翻译成字符后的字符的个数
* 4.判断是否到末尾
*/
while((len = inStream.read(buffer))!=-1){
System.out.println("len--->"+len);
System.out.println("buffer[0]--->"+buffer[0]);
System.out.println("buffer[1]--->"+buffer[1]);
/*
* 将缓冲区buffer,按从偏移量0开始,直到len长度这一块的数据
* 写入byteArrayOutputStream中
*/
byteArrayOutputStream.write(buffer,0,len);
}
System.out.println("size--->"+inStream.available());
//使用完成io操作,关闭资源
inStream.close();
//返回字节数组输出流的字节数组
return byteArrayOutputStream.toByteArray();
}
//获取流对象
public static InputStream readFile(){
System.out.println("进入readFile ok");
FileInputStream fis =null;
String result = "";
try {
//根据路径实例化一个输入流对象
fis = new FileInputStream("D://hello.txt");
//返回这个输入流对象可以被读的剩下的bytes字节的估计值
//int size = fis.available();
//System.out.println("readFile size--->"+size);
/*//根据输入流的字节数size创建字节数组
byte[] array = new byte[size];
//将数据读入字节数组中
fis.read(array);
//将字节数组转化成String字符串
result = new String(array);*/
//System.out.println("readFile size--->"+fis.available());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("退出readFile ok");
return fis;
}
}
基本理解了其概念,熟能生巧,期待以后能多次使用IO流。
相关文章推荐
- java 获取网页指定内容
- Java获取网页链接内容
- java 如何获取网页的动态内容,并解析网页内容
- JAVA获取html网页中的图片src内容
- java 获取网页指定内容-2(实践+修改)
- Java获取网页内容的方法
- java的IO流包装不当导致从网页获取的数据出现乱码
- Java中如何利用Selenium获取元素分析网页内容
- java获取网页的内容(以String形式储存)
- java用url获取网页内容并输出到控制台
- Java基础:利用HttpClient获取网页内容
- Java使用HttpClient的HttpGet获取网页内容
- 【java爬虫】HttpClient4.5获取网页内容
- java获取url网页指定内容
- Java——获取网页内容并在本地生成HTML文件
- httpclient 用java调用 的方式获取网页内容,
- Java 抓取网页内容,获取指定服务器IP
- 利用java获取网页内容
- java获取网页内容
- java中通过url获取网页内容,中文显示是乱码