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