IO流緩衝區物件的使用和理解。
阿新 • • 發佈:2019-02-13
/*
模擬一下 BufferedReader
明白了 BufferedReader 類中特有方法 readLine 的原理後
可以自定義一個類中包含一個功能和 readLine 一樣的方法
*/
import java.io.*;
class MyBufferedReader {
private Reader r;
public MyBufferedReader(Reader r) {
this .r = r;
}
public String myReadLine() throws IOException {
StringBuffer sb = new StringBuffer(); int ch = 0 ;
while ((ch = r.read()) != - 1 ) {
if (ch == '\r' )
continue ;
if (ch == '\n' )
return sb.toString();
else
sb.append(( char )ch);
}
if (sb.length() != 0 ) //有時最後一行結尾處沒有換行符,此時也要返回,否者會丟失資料
return sb.toString();
return null ;
}
public void close() throws IOException {
r.close();
}
}
public class MyBufferedReaderTest01 {
public static void main(String[] args) throws IOException { //為了方便演示,直接拋,不進行 catch
Reader fr = new FileReader( "buf.txt" );
MyBufferedReader myBuf = new MyBufferedReader(fr);
String str = null ;
while ((str = myBuf.myReadLine()) != null ) {
System.out.println(str); }
myBuf.close();
}
}
|
myReadLine()方法中,判斷到 \r 時,不把 \r 加上去,繼續讀下一個字元,當下一個字元是 \n 時,就說明此行結束
返回這行。
但是我文本里面的字元中間有 \r\n 為什麼卻答應出來了,而沒有換行
記事本里內容是:
abcd---0
abcd---1
abcd---2
abcd---3\r\nabcd---4
讀取結果為什麼是:
abcd---0
abcd---1
abcd---2
abcd---3\r\nabcd---4
碰到 \r\n 為啥沒有換行呀
你看得見的\r\n,比如‘\’的ascii碼是92,‘n’的ascii碼是110,所以應該是兩個字元。你的意思是碰到\r\n就換行吧,你可以定義一個字串str="\\t\\n",然後做一個判斷,if讀到的連續兩個可見字元是str,則換行。