Java 流的使用总结

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[])将返回的是读取了多少个字节



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值