天天看点

Java之IO(七)转换流 InputStreamReader、OutputStreamWrite

package com.shuhuadream.inputstream;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

//转换流
/**
 * 输入字节流的转换流
 * InputStreamReader
 * 
 * 输出字节流的转换流
 * OutputStreamWriter
 * 
 * 
 * 转换流的作用:
 * 1.如果目前所获取到的一个字节流需要转换为字符流使用,这时就可以使用转换流。 
 * 2.使用转换流可以指定编码表进行读写文件
 * */

public class Demo01 {
	public static void main(String[] args) throws IOException {
		//isr();
		//osw();
		//writeTest();
		readTest();
	}
	
	//使用输入字节流的转换流指定码表进行读取文件数据
	public static void readTest() throws IOException{
		File file = new File("d:\\demo\\a.txt");
		FileInputStream fis = new FileInputStream(file);
		//创建字节流的转换流并且指定码表进行读取
		InputStreamReader isr = new InputStreamReader(fis);
		char[] buf = new char[1024];
		int length = 0;
		while((length = isr.read(buf))!=-1){
			System.out.println(new String(buf,0,length));
		}
	}
	
	//使用输出字节流的转换流指定码表写出数据
	public static void writeTest() throws IOException{
		File file = new File("d:\\demo\\a.txt");
		//建立数据的输出通道
		FileOutputStream fos = new FileOutputStream(file);
		//把输出字节流转换为字符流并且指定码表
		OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
		osw.write("新中国好");
		osw.close();
		
	}
	
	public static void osw(){
		File file = new File("d:\\demo\\a.txt");
		FileOutputStream fos;
		try {
			fos = new FileOutputStream(file);
			//把输出字节流转换为输出字符流
			OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
			osw.write("大家好");
			osw.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void isr(){
		InputStream in = System.in;//获取标准输入流
		InputStreamReader isr = new InputStreamReader(in);
		//使用字符流的缓冲类
		BufferedReader br = new BufferedReader(isr);
		String line = null;
		try {
			while((line = br.readLine())!=null){
				System.out.println("内容是:"+line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}