天天看點

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();
		}
	}
}