天天看點

Java IO詳解(四)------字元輸入輸出流

Java IO 字元輸入輸出流

File 類的介紹:http://www.cnblogs.com/ysocean/p/6851878.html

Java IO 流的分類介紹:http://www.cnblogs.com/ysocean/p/6854098.html

Java IO 位元組輸入輸出流:http://www.cnblogs.com/ysocean/p/6854541.html

那麼這篇部落格我們講的是字元輸入輸出流:Reader、Writer(下圖紅色長方形框内),紅色橢圓框内是其典型實作,圖檔顯示錯誤(FileReader、FileWriter)

  

Java IO詳解(四)------字元輸入輸出流

①、為什麼要使用字元流?

  因為使用位元組流操作漢字或特殊符号語言的時候容易亂碼,因為漢字不止一個位元組,為了解決這個問題,建議使用字元流。

②、什麼情況下使用字元流?

  一般可以用記事本打開的檔案,我們可以看到内容不亂碼的。就是文本檔案,可以使用字元流。而操作二進制檔案(比如圖檔、音頻、視訊)必須使用位元組流

 1、字元輸出流:FileWriter

public abstract class Writer
  extends Object
  implements Appendable, Closeable, Flushable
      

  用于寫入字元流的抽象類

  方法摘要:

Java IO詳解(四)------字元輸入輸出流

  下面我們用 字元輸出流 Writer  的典型實作 FileWriter 來介紹這個類的用法:

//1、建立源
		File srcFile = new File("io"+File.separator+"a.txt");
		//2、建立字元輸出流對象
		Writer out = new FileWriter(srcFile);
		//3、具體的 IO 操作
			/***
			 * void write(int c):向外寫出一個字元
			 * void write(char[] buffer):向外寫出多個字元 buffer
			 * void write(char[] buffer,int off,int len):把 buffer 數組中從索引 off 開始到 len個長度的資料寫出去
			 * void write(String str):向外寫出一個字元串
			 */
		//void write(int c):向外寫出一個字元
		out.write(65);//将 A 寫入 a.txt 檔案中
		//void write(char[] buffer):向外寫出多個字元 buffer
		out.write("Aa帥鍋".toCharArray());//将 Aa帥鍋 寫入 a.txt 檔案中
		//void write(char[] buffer,int off,int len)
		out.write("Aa帥鍋".toCharArray(),0,2);//将 Aa 寫入a.txt檔案中
		//void write(String str):向外寫出一個字元串
		out.write("Aa帥鍋");//将 Aa帥鍋 寫入 a.txt 檔案中
		
		//4、關閉流資源
		/***
		 * 注意如果這裡有一個 緩沖的概念,如果寫入檔案的資料沒有達到緩沖的數組長度,那麼資料是不會寫入到檔案中的
		 * 解決辦法:手動重新整理緩沖區 flush()
		 * 或者直接調用 close() 方法,這個方法會預設重新整理緩沖區
		 */
		out.flush();
		out.close();
      

 2、字元輸入流:Reader

public abstract class Reader
  extends Object
  implements Readable, Closeable
      

  用于讀取字元流的抽象類。

Java IO詳解(四)------字元輸入輸出流

  下面我們用 字元輸入流 Reader  的典型實作 FileReader 來介紹這個類的用法:

//1、建立源
		File srcFile = new File("io"+File.separator+"a.txt");
		//2、建立字元輸出流對象
		Reader in = new FileReader(srcFile);
		//3、具體的 IO 操作
			/***
			 * int read():每次讀取一個字元,讀到最後傳回 -1
			 * int read(char[] buffer):将字元讀進字元數組,傳回結果為讀取的字元數
			 * int read(char[] buffer,int off,int len):将讀取的字元存儲進字元數組 buffer,傳回結果為讀取的字元數,從索引 off 開始,長度為 len
			 * 
			 */
		//int read():每次讀取一個字元,讀到最後傳回 -1
		int len = -1;//定義目前讀取字元的數量
		while((len = in.read())!=-1){
			//列印 a.txt 檔案中所有内容
			System.out.print((char)len); 
		}
		
		//int read(char[] buffer):将字元讀進字元數組
		char[] buffer = new char[10]; //每次讀取 10 個字元
		while((len=in.read(buffer))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		
		//int read(char[] buffer,int off,int len)
		while((len=in.read(buffer,0,10))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		//4、關閉流資源
		in.close();
      

 3、用字元流完成檔案的複制

/**
		 * 将 a.txt 檔案 複制到 b.txt 中
		 */
		//1、建立源和目标
		File srcFile = new File("io"+File.separator+"a.txt");
		File descFile = new File("io"+File.separator+"b.txt");
		//2、建立字元輸入輸出流對象
		Reader in = new FileReader(srcFile);
		Writer out = new FileWriter(descFile);
		//3、讀取和寫入操作
		char[] buffer = new char[10];//建立一個容量為 10 的字元數組,存儲已經讀取的資料
		int len = -1;//表示已經讀取了多少個位元組,如果是 -1,表示已經讀取到檔案的末尾
		while((len=in.read(buffer))!=-1){
			out.write(buffer, 0, len);
		}
		
		//4、關閉流資源
		out.close();
		in.close();
      

作者:IT可樂

出處:http://www.cnblogs.com/ysocean/

資源:微信搜【IT可樂】關注我,回複 【電子書】有我特别篩選的免費電子書。

本文版權歸作者所有,歡迎轉載,但未經作者同意不能轉載,否則保留追究法律責任的權利。