關於BufferedReader的read()和readLine()的區別
BufferedReader的read()和readLine()區別
從一個有若幹行deep文件中依次讀取各行,處理後輸出,如果用以下方法,則會出現除第一行外首字符丟失的現象
String str = null; br=new BufferedReader(new FileReader(fileName)); do{ str = buf.readLine()); }while(br.read()!=-1);
以下用法會使每行都少首字符
while(br.read() != -1){ str = br.readLine(); }
原因在於br.read()!=-1這判斷條件上,因為在執行這個條件的時候它已經讀取瞭一個字符,然而在這裡並沒有對讀取出來的這個字符做處理,所以會出現少一個字符,如果你這裡寫的是while(br.readLine()!=null)會出現隔一行少一行。
建議使用一下方法
String str = null; while((str = br.readLine()) != null){ //System.out.println(str);//此時str就保存瞭一行字符串 }
這樣應該就可以無字符丟失地得到一行瞭
小結一下
使用readLine()一定要註意
1:讀入的數據要註意有/r,/n或/r/n
2:沒有數據時會阻塞,在數據流異常或斷開時才會返回null
3:使用socket之類的數據流時,要避免使用readLine(),以免為瞭等待一個換行/回車而一直堵塞
項目經驗
1.讀取一個txt文件,方法很多種我使用瞭字符流來讀取(為瞭方便)
FileReader fr = new FileReader("f:\\TestJava.Java"); BufferedReader bf = new BufferedReader(fr); //這裡進行讀取 int b; while((b=bf.read())!=-1){ System.out.println(bf.readLine()); }
發現每行的第一個字符都沒有顯示出來,原因呢:b=bf.read())!=-1 每次都會先讀取一個字節出來,所以後面的bf.readLine());讀取的就是每行少一個字節。所以,應該使用
String valueString = null; while ((valueString=bf.readLine())!=null){ System.out.println(valueString); }
BufferedReader.readLine()總結
BufferedReader.readLine()
最近寫瞭段用於獲取執行命令的返回值的代碼,如下:
while(br.readLine()!null) { msg=br.readLine(); }
然後顯示的結果卻是隔行輸出的。想瞭下, 應該是每調用一次read()或者readLine(),指針都會移動的。所以得到的是隔行輸出。
正確的代碼如下
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String msg = null; while((msg = br.readLine())!= null) { System.out.println(msg); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 關於BufferedReader的讀取效率問題
- 使用BufferedReader讀取TXT文件中數值,並輸出最大值
- 解決BufferedReader.readLine()遇見的坑
- java 使用readLine() 亂碼的解決
- Java Socket上的Read操作阻塞問題詳解