關於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。

推薦閱讀: