java I/O———兩種輸入流

1.BufferedReader類

BufferedReader類屬於一個緩衝的輸入流,而且是一個字符流的操作對象。在java中對於緩衝流也分爲兩類:字節緩衝流(BufferedInputStream)、字符緩衝流(BufferedReader)。

之所以選擇BufferedReader類操作是因爲在此類中提供有如下方法(讀取一行數據):

String readLine() throws IOException

這個方法可以直接讀取一行數據(以回車爲換行符)
但是這個時候有一個非常重要的問題要解決,來看BufferedReader類的定義與構造方法:

public class BufferedReader extends Reader
public BufferedReader(Reader in)

而System.in是InputStream類的子類,這個時候與Reader沒有關係,要建立起聯繫就要用到InputStreamReader類。如下:

在這裏插入圖片描述

範例:利用BufferedReader實現鍵盤輸入

在這裏插入圖片描述

以上操作形式是java10多年前輸入的標準格式,但是時過境遷,這個類也淹沒在歷史的潮流之中,被JDK1.5提供的java.util.Scanner類所取代。

使用以上形式實現的鍵盤輸入還有一個最大特點,由於接收的數據類型爲String,可以使用String類的各種操作進行數據處理並且可以變爲各種常見數據類型。

2.java.util.Scanner類

打印流解決的是OutputStream類的缺陷,BufferedReader解決的是InputStream類的缺陷。而Scanner解決的是BufferedReader類的缺陷(替換BufferedReader類)

Scanner是一個專門進行輸入流處理的程序類,利用這個類可以方便處理各種數據類型,同時也可以直接結合正則表達式進行各項處理,在這個類中主要關注以下方法:

  1. 判斷是否有指定類型數據: public boolean hasNextXxx()
  2. 取得指定類型的數據: public 數據類型 nextXxx()
  3. 定義分隔符:public Scanner useDelimiter(Pattern pattern)
  4. 構造方法:public Scanner(InputStream source)

範例:使用Scanner實現數據輸入

在這裏插入圖片描述

使用Scanner還可以接收各種數據類型,並且幫助用戶減少轉型處理。

範例:接收其他類型數據

在這裏插入圖片描述

最爲重要的是,Scanner可以對接收的數據類型使用正則表達式判斷

範例:利用正則表達式進行判斷

在這裏插入圖片描述在這裏插入圖片描述

但是以上操作在開發之中基本不會出現,現在不可能讓你編寫一個命令行程序進行數據輸入。
使用Scanner本身能夠接收的是一個InputStream對象,那麼也就意味着可以接收任意輸入流,例如:文件輸入流 ;Scanner完美的替代了BufferedReader,而且更好的實現了InputStream的操作。

範例:使用Scanner操作文件

在這裏插入圖片描述

總結:以後除了二進制文件拷貝的處理之外,那麼只要是針對程序的信息輸出都是用打印流(PrintStream、PrintWriter),信息輸出使用Scanner。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章