java中的緩衝輸入流學習總結
阿新 • • 發佈:2019-02-12
一、基本內容
在JDK1.5之前,BufferedReader是一個非常重要的資料讀取的操作類,如果要進行輸入流的操作,尤其是檔案操作,都建議使用BufferedReader類使用。
BufferedReader類屬於Reader的子類,負責進行緩衝區的讀取,由於其本身屬於字元輸入流,所以更加適合輸入中文文字資訊。
二、BufferedReader類的繼承結構圖:
在BufferedReader類中提供有兩個重要的方法
- 構造方法:
public BufferedReader(Reader in);
- 資料讀取方法:
public String readLine() throws IOException
範例:BufferedReader實現資料的輸入。
分析:
資料輸入要使用System.in,而System.in是InputStream型別。
BufferedReader類的構造需要接收Reader型別,那麼需要將位元組輸入流變為字元輸入流,使用InputStreamReader
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io .File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in ));
System.out.println("請輸入資訊: ");
String str = buf.readLine();
System.out.println("輸入資訊為: "+str);
}
}
以上的程式碼已經成功的實現了鍵盤輸入資料,並且也可以直接按照字串返回,不過這種例項化物件進行中的操作是不可取的。
先在有了BufferedReade類物件,那麼之後就可以進行一些輸入驗證的操作了。
比如說:要求輸入年齡,如果輸入的不是數字,則提示錯誤。
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
boolean flag = true;
while(flag) {
System.out.println("請輸入年齡: ");
String str = buf.readLine();
if(str.matches("\\d+")) {
System.out.println("輸入年齡為: "+Integer.parseInt(str));
flag = false;
}else {
System.out.println("請輸入正確的年齡資訊。");
}
}
}
}
以上的兩個範例都是圍繞著鍵盤輸入資料的操作進行的,不過使用BufferedReader類還有一個好處是可以進行大文字的讀取。
範例:利用BufferedReader讀取檔案的資訊。
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new FileReader(new File("E:" + File.separator + "my.txt" )));
String string = null;
while((string = buf.readLine()) != null) {
System.out.println(string);
}
buf.close();
}
}
雖然BufferedReader 類比較好用,但是在輸入資料的時候已經不是首選了。而是次要的選擇。