1. InputStreamReader和BufferedReader将流转化为文本
1) 从url中读取资源将其转化为json(每日一句写法)
package com.json;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import net.sf.json.JSONObject;
public class Json {
public static void main(String[] args) {
try {
URL webUrl = new URL("http://open.iciba.com/dsapi/");
HttpURLConnection urlConnection = (HttpURLConnection)webUrl.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader breader = new BufferedReader(reader);
String speck = null;
StringBuffer str = new StringBuffer();
while ((speck = breader.readLine())!= null) {
str.append(speck);
}
JSONObject dataJson=JSONObject.fromObject(str.toString());
String response=(String) dataJson.get("note");
// JSONObject Json = JSONObject.fromObject(str.toString());
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2) 从url中读取资源将其转化为xml(天气预报写法)
package com.xml;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
public class WeatherIo {
private static final String getWeatherUrl = "http://php.weather.sina.com.cn/xml.php?password=DJOYnieT8234jlsK";
public void getXml() throws Exception{
// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// step 2:获得具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
String city = "武汉";
city = URLEncoder.encode(city, "gb2312");
String url = getWeatherUrl+"&city="+city+"&day=1";
URL webUrl = new URL(url);
Document document = db.parse(webUrl.openStream());
InputStreamReader reader = new InputStreamReader(webUrl.openStream());
BufferedReader breader = new BufferedReader(reader);
//Document document = db.parse(webUrl.openStream());
StringBuilder result = new StringBuilder();
String line = null;
while ((line=breader.readLine())!=null) {
result.append(line);
}
System.out.println(result.toString());
//解析document文件 取到一天的天气预报
List onedayData = getOnedayData(document);
}
public List getOnedayData(Document document){
try {
List onedayData = new ArrayList();
String city = "";//城市
String status1 = "";//天气
String status2 = "";
String figure1 = "";//天气拼音
String figure2 = "";
String temperature1 = "";//温度
String temperature2 = "";
String direction1 = "";//风向
String direction2 = "";
String power1 = "";//风力
String power2 = "";
String savedate_weather = "";//时间
city = document.getElementsByTagName("city").item(0).getFirstChild().getNodeValue();
if(document.getElementsByTagName("status1").item(0).getFirstChild()!=null){
status1 = document.getElementsByTagName("status1").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("status2").item(0).getFirstChild()!=null){
status2 = document.getElementsByTagName("status2").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("figure1").item(0).getFirstChild()!=null){
figure1 = document.getElementsByTagName("figure1").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("figure2").item(0).getFirstChild()!=null){
figure2 = document.getElementsByTagName("figure2").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("temperature1").item(0).getFirstChild()!=null){
temperature1 = document.getElementsByTagName("temperature1").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("temperature2").item(0).getFirstChild()!=null){
temperature2 = document.getElementsByTagName("temperature2").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("direction1").item(0).getFirstChild()!=null){
direction1 = document.getElementsByTagName("direction1").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("direction2").item(0).getFirstChild()!=null){
direction2 = document.getElementsByTagName("direction2").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("power1").item(0).getFirstChild()!=null){
power1 = document.getElementsByTagName("power1").item(0).getFirstChild().getNodeValue();
}
if(document.getElementsByTagName("power2").item(0).getFirstChild()!=null){
power2 = document.getElementsByTagName("power2").item(0).getFirstChild().getNodeValue();
}
savedate_weather = document.getElementsByTagName("savedate_weather").item(0).getFirstChild().getNodeValue();
onedayData.add(city);
onedayData.add(status1);
onedayData.add(status2);
onedayData.add(figure1);
onedayData.add(figure2);
onedayData.add(temperature1);
onedayData.add(temperature2);
onedayData.add(direction1);
onedayData.add(direction2);
onedayData.add(power1);
onedayData.add(power2);
onedayData.add(savedate_weather);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(savedate_weather);
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");//星期格式
String xingqi = dateFm.format(date);
onedayData.add(xingqi);
return onedayData;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
2. ObjectInputStream和ObjectoutputStream
1) ObjectoutputStream将java对象bean实例化在本地磁盘上
package com.serializable_txt.file;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import com.serializable_txt.bean.Person;
public class ObjectOutputStream1 {
public static void main(String[] args) throws FileNotFoundException, IOException {
/*
*序列化,将对象保存在了本地硬盘上面
*/
Person pr1 = new Person("tom",18);
Person pr2 = new Person("marry",20);
Person pr3 = new Person("tomiay",18);
File f = new File("c:ser1.txt");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
out.writeObject(pr1);
out.writeObject(pr2);
out.writeObject(pr3);
}
}
2) ObjectInputStream本地磁盘上文件读取为java对象bean
package com.serializable_txt.file;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.imageio.stream.FileImageInputStream;
import com.serializable_txt.bean.Person;
@SuppressWarnings("unused")
public class ObjectInputStream2 {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
/*
*反序列化,读取本地硬盘上面信息,封装成对象
*/
File f = new File("c:ser1.txt");
ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
// Person pr1 = (Person) input.readObject();
// System.out.println(pr1.getName());
// Person pr2 = (Person) input.readObject();
// System.out.println(pr2.getName());
// Person pr3 = (Person) input.readObject();
// System.out.println(pr3.getName());
/*
* 循环读取,当出现EofException异常时,退出循环;
*/
while (true) {
try {
Person pr = (Person) input.readObject();
System.out.println(pr.getName());
} catch (Exception e) {
if(e instanceof EOFException){
break;
}
}
}
}
}
3) 用到的bean(要序列化)
package com.serializable_txt.bean;
import java.io.Serializable;
/*
* 序列化;标记接口
*/
public class Person implements Serializable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
3. DataInputStream和DataOutputStream
1) 存储和读取所实例化的对象的属性
package com.serializable_txt.file;
import java.io.*;
import com.serializable_txt.bean.Member;
public class DataStreamDemo
{
public static void main(String[] args)
{
Member[] members = {new Member("Justin",90),
new Member("momor",95),
new Member("Bush",88)};
try
{
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("f://members.txt")));
for(Member member:members)
{
//写入UTF字符串
dataOutputStream.writeUTF(member.getName());
//写入int数据
dataOutputStream.writeInt(member.getAge());
}
//所有数据至目的地
dataOutputStream.flush();
//关闭流
dataOutputStream.close();
DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("f://members.txt")));
//读出数据并还原为对象
for(int i=0;i<members.length;i++)
{
//读出UTF字符串
String name = dataInputStream.readUTF();
//读出int数据
int score = dataInputStream.readInt();
members[i] = new Member(name,score);
}
//关闭流
dataInputStream.close();
//显示还原后的数据
for(Member member : members)
{
System.out.printf("%s\t%d%n",member.getName(),member.getAge());
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
2) 用到的bean
package com.serializable_txt.bean;
public class Member {
private String name;
private int age;
public Member() {
}
public Member(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
4.PushbackInputStream流的使用
package net.nyist.io;
import java.io.FileReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.security.acl.Permission;
public class PushBackTest {
public static void main(String[] args) {
try (
// 创建一个PushbackReader对象,指定推回缓冲区的长度为64
PushbackReader pr = new PushbackReader(new FileReader(
"src/net/nyist/io/PushBackTest.java"), 64);
) {
char[] buf = new char[32];
// 用以保存上次读取字符串的内容
String lastContent = "";
int hasRead = 0;
// 循环读取文件内容
while ((hasRead = pr.read(buf)) > 0) {
// 将读取的内容转化为字符串
String content = new String(buf, 0, hasRead);
int targetIndex = 0;
// 将上次读取的字符串和本次读取的字符串拼接起来
// 查看是否包含目标字符串,
// 如果包含目标字符串
if ((targetIndex = (lastContent + content)
.indexOf("new PushbackReader")) > 0) {
// 将本次的内容和上次的内容一起推回缓冲区
pr.unread((lastContent + content).toCharArray());
// 重现定义一个长度为targetIndex的char类型的数组
if (targetIndex > 32) {
buf = new char[targetIndex];
}
// 再次读取指定长度的内容,即目标字符串之前的内容
pr.read(buf, 0, targetIndex);
// 答应读取指定长度的内容
System.out.println(new String(buf, 0, targetIndex));
System.exit(0);
} else {
// 打印上次读取的内容
System.out.println(lastContent);
// 将本次读取的内容设置为上次读取的内容
lastContent = content;
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
5.ByteArrayOutputStream的使用 实现byte转化 在socket中,会常用这个
public static byte[] readStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while( (len=inStream.read(buffer)) != -1){
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();//new String (outSteam.toByteArray());
}
**重点**
所有inputStream的read()方法,是一个字节的读取,而read(byte[])将返回的是读取了多少个字节