天天看點

IO流緩沖區對象的使用和了解。

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 = 

;

while

((ch = r.read()) != -

1

) {

if

(ch == 

'\r'

)

continue

;

if

(ch == 

'\n'

)

return

sb.toString();

else

sb.append((

char

)ch);

}

if

(sb.length() != 

)    

//有時最後一行結尾處沒有換行符,此時也要傳回,否者會丢失資料

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,則換行。