1. 程式人生 > >_055_輸入輸出字元流

_055_輸入輸出字元流

=======

之前我們學了FileInputStream位元組流,今天是輸入字元流 位元組流只能讀取位元組資料,且因為是需要一個位元組,所以漢字讀取不了,要讀取需要用快取陣列的方式 FileInputStream預設是用GBK碼錶,FileReader也是GBK碼錶,但是它自帶了解碼功能

public abstract class Reader 所有讀字元流的超類,因為是抽象的,所 以要用實現類 -----------------FileReader  用法和之前的FileInputStream一樣,特性也一樣

public abstract class Writer所有寫字元流的超類,因為是抽象的,所以要用實現類 -----------------FileWriter 而FileWriter的用法卻是和BufferedOutputStream一樣,因為FileWriter裡面也維護了 一個緩衝陣列,然後還需要刷出,刷出還是一樣有3個方式,flush,close,還有就是字元陣列滿了也會刷出 特性和要注意的地方和FileOutputStream一樣

注意: 1 用FileInputStream整體來說還是不能讀取正常文字,如果2漢字中間有一個字母,因為讀取的是位元組,所以要讀5個位元組    我們緩衝陣列填的是4或者4的整數倍,也就是偶數,也就是說總會讀出亂碼的     2 位元組流和字元流的應用場景,字元流只有在我們能看懂的資料處可以使用,比如記事本里的正常文字    而位元組流最好是用在我們看不見的資料處,比如圖片裡的資料,我們能看到圖片,但是我們看不懂圖片裡的資料    因為圖片不是文字,有些碼在編碼表裡面是轉不了的,這些轉不了的碼就會變成1個位元組返回,所以我們的檔案比原來的位元組少了    所以複製出來的圖片是損壞的。這種情況下是要使用位元組流的

讀取完整的字元

	public static void main(String[] args) throws IOException
	{
		//用字元流FileWriter讀取完整資料
		File file1 = new File("D:\\a.txt");
		FileReader fileReader1 = new FileReader(file1);
		char[] arr = new char[4];
		int length = 0;
		StringBuilder sbd_1 = new StringBuilder();
		while ((length = fileReader1.read(arr)) != -1)
		{
			sbd_1.append(arr);
		}
		System.out.println(sbd_1);
	}

輸出字串

class Test
{
	public static void main(String[] args) throws IOException
	{
		  File file1=new File("D:\\1.txt");
		  FileWriter  fileWriter1=new FileWriter(file1);
		  String string="gsa ds感受 dg到 sdh%@6gdseyyfdhj 單方事故";
		  fileWriter1.write(string,0,string.length());
		  fileWriter1.close(); //關閉才會刷出內容
	}
}