1. 程式人生 > >Java IO操作——BufferedReader(緩衝區讀取內容,避免中文亂碼)

Java IO操作——BufferedReader(緩衝區讀取內容,避免中文亂碼)

 要點:

掌握BufferedReader類的使用

掌握鍵盤輸入的基本形式

Buffer:表示緩衝區的。之前的StringBuffer,緩衝區中的內容可以更改,可以提高效率。

如果想接收任意長度的資料,而且避免亂碼的產生,就可以使用BufferedReader。

public class BufferedReader extends Reader

因為輸入的資料有可能出現中文,所以此處使用字元流完成

BufferedReader是從緩衝區之中讀取內容,所有的輸入的位元組資料都將放在緩衝區之中。

1、public BufferedReader(Reader in) 構造方法   接收一個Reader類的例項

2、public String readLine() throws IOException  一次性從緩衝區中將內容全部讀取進來。

System.in本身表示的是InputStream(位元組流),現在要求接收的是一個字元流,需要將位元組流轉為字元流才可以,InputStreamReader。

BufferedReader接收鍵盤輸入時例項化如下:


此時就可以給出鍵盤輸入資料的標準格式。

import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[]){
		BufferedReader buf = null ;		// 宣告物件
		buf = new BufferedReader(new InputStreamReader(System.in)) ;	// 將位元組流變為字元流
		String str = null ;	// 接收輸入內容
		System.out.print("請輸入內容:") ;
		try{
			str = buf.readLine() ;	// 讀取一行資料
		}catch(IOException e){
			e.printStackTrace() ;	// 輸出資訊
		}
		System.out.println("輸入的內容為:" + str) ;
	}
};

此時,沒有任何長度限制,可以輸入很多的內容,每次都以回車結束。

不僅可以接收鍵盤輸入,還可以將檔案中的內容讀取到緩衝區之中 然後呼叫readLine()方法將緩衝區中的全部內容轉為字串。例項如下:

在d盤根目錄下有一個test.txt檔案內容如下:


程式碼讀取如下:

import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[])throws IOException{
		BufferedReader buf = null ;		// 宣告物件
		buf = new BufferedReader(new FileReader(new File("D:"+File.separator+"test.txt"))) ;	// 將位元組流變為字元流
		String str = null ;	// 接收輸入內容
		System.out.print("請輸入內容:") ;
		try{
			str = buf.readLine() ;	// 讀取一行資料
		}catch(IOException e){
			e.printStackTrace() ;	// 輸出資訊
		}
		System.out.println("輸入的內容為:" + str) ;
	}
};

需要注意的是,如果從檔案中讀取的話readLine一次只能讀取一行的資料。

編輯test.txt 如下所示:


import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[])throws IOException{
		BufferedReader buf = null ;		// 宣告物件
		buf = new BufferedReader(new FileReader(new File("D:"+File.separator+"test.txt"))) ;	// 將位元組流變為字元流
		String str1 = null ;	// 接收輸入內容
		String str2 = null ;	// 接收輸入內容
		try{
			str1 = buf.readLine() ;	// 讀取一行資料
			str2 = buf.readLine() ;	// 讀取一行資料
		}catch(IOException e){
			e.printStackTrace() ;	// 輸出資訊
		}
		System.out.println("讀取第一行的內容為:" + str1) ;
		System.out.println("讀取第二行的內容為:" + str2) ;
	}
};

可以發現:從檔案中使用readLine()方法讀取行內容時,會自動接著上次在流中的位置進行讀取。

如果要全部讀取檔案的中的內容有如下兩種方法:

方法一:使用StringBuffer類不停的連線readLine()從每次讀取的一行內容,直至讀取的為null為止。然後進行輸出。

方法二:使用StringBuffer類不停的連線read()方法讀取到的每一個數字轉化後的字元。然後進行輸出。

再次不在贅述。

個人感覺,還是先系統的瞭解一些各種類的作用,等到具體開發時再檢視API文件,就能直接找到自己所需要類的方法。