勿以惡小而爲之,勿以善小而不爲--------------------------劉備
勸諸君,多行善事積福報,莫作惡
上一章簡單介紹了 Scanner讀取文件和輸入數據(六),如果沒有看過,請觀看上一章
以前讀取和寫入文件內容時,用的Reader和Writer, 當調用 read() 或者 readLine() 方法時,效率是非常慢的。 如果能添加緩衝區,那麼就非常好了。 BufferedReader 和 BufferedWriter ,就是在 Reader和 Writer 的基礎上,添加了緩衝區, 即不僅具有Reader和Writer的各個功能,還能通過緩衝區進行相應的優化, 其實,這就是裝飾器。
一. BufferedReader
從字符輸入流讀取文本,緩衝字符,以提供字符,數組和行的高效讀取。
一.一 方法
一.一.一 構造方法
一.一.一.一 方法
方法 | 作用 |
---|---|
BufferedReader(Reader in) | 傳入一個 Reader對象 |
其中,傳入的這個 Reader 既可以是 FileReader 這樣直接的對象,也可以是 InputStreamReader 這樣轉換過來的對象,有這兩種常見形式。
建議採用第二種,轉換流的方式。
一.一.一.二 演示
@Test
public void readConTest() throws Exception{
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"rz.txt");
//構造字符的 默認8192
BufferedReader br=new BufferedReader(
new FileReader(file),8192);
//建議採用第二種方式
BufferedReader br1=new BufferedReader(
//跟轉換流
new InputStreamReader(new FileInputStream(file))
);
}
一.一.二 讀取方法
方法 | 作用 |
---|---|
void close() | 關閉流並釋放與之相關聯的任何系統資源 |
int read() | 讀取一個字符 |
int read(char[] cbuf, int off, int len) | 讀取 off到off+len的內容到 cbuf字符數據中,返回讀取的內容 |
String readLine() | 讀取一行文字,即按行讀取, 回車符時結束 |
常常使用 readLine() 一行一行的讀取,返回結果直接就是字符串,不用轉換。
一.二 BufferedReader 演示
一.二.一 讀取文件內容
@Test
public void readTest() throws Exception{
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"Hello3.txt");
//構造字符的 默認8192 8M 8M的讀
BufferedReader br=new BufferedReader(
//跟轉換流
new InputStreamReader(new FileInputStream(file))
);
String temp="";
while(null!=(temp=br.readLine())){
System.out.println("輸出行:"+temp);
}
}
運行程序,控制檯打印出文件的內容:
一.二.二 讀取控制檯 System.in 輸入
public static void main(String[] args) throws Exception {
readSystem();
}
public static void readSystem() throws Exception{
System.out.println("請輸入問候語:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String password=br.readLine();
System.out.println("輸出問候語:"+password);
}
運行程序:
二. BufferedWriter
二一 方法
二.一.一 構造方法
二.一.一.一 方法
方法 | 作用 |
---|---|
BufferedWriter(Writer out) | 傳入一個 Writer 對象 |
其中,傳入的這個 Writer 既可以是 FileWriter 這樣直接的對象,也可以是 InputStreamWriter 這樣轉換過來的對象,有這兩種常見形式。
建議採用第二種,轉換流的方式。
二.一.一.二 演示
@Test
public void writeConTest() throws Exception{
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"Hello3.txt");
//第一種
BufferedWriter bufferedWriter=new BufferedWriter(
new FileWriter(file,true)
);
//最好是用第二種轉換的
BufferedWriter bufferedWriter1=new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file))
);
}
二.一.二 寫入方法
方法 | 作用 |
---|---|
void close() | 關閉流,先刷新 |
void write(int c) | 寫入一個字符 |
void write(char[] cbuf, int off, int len) ) | 寫入字符數組中的一部分 |
void write(String s, int off, int len) | 寫入字符串的一部分 |
void newLine() | 換行, 兼容不同系統 |
常常使用 write(String s, int off, int len) 直接寫入字符串文本。
如果需要換行的話, 用 newLine() 方法進行換行。
二.二 BufferedWriter 演示
Hello3.txt 目前的文件內容是:
@Test
public void writeTest() throws Exception{
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"Hello3.txt");
BufferedWriter bufferedWriter1=new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file))
);
//重啓一行, 其實就是內部寫 \r\n
bufferedWriter1.newLine();
bufferedWriter1.write("我是BufferedWriter寫入的內容");
bufferedWriter1.newLine();
bufferedWriter1.write("Hello",2,3);
bufferedWriter1.close();
}
運行程序,查看 Hello3.txt 文件的內容(重寫寫入的)
謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!