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(下圖紅色長方形框內),紅色橢圓框內是其典型實現,圖片顯示錯誤(FileReaderFileWriter

  

①、為什么要使用字符流?

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

②、什么情況下使用字符流?

  一般可以用記事本打開的文件,我們可以看到內容不亂碼的。就是文本文件,可以使用字符流。而操作二進制文件(比如圖片、音頻、視頻)必須使用字節流

 

 1、字符輸出流:FileWriter

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

  用於寫入字符流的抽象類

  方法摘要:

  

  下面我們用 字符輸出流 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

  用於讀取字符流的抽象類。

  方法摘要:

  

  下面我們用 字符輸入流 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();

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM