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文件,就能直接找到自己所需要類的方法。