關(guān)于BufferedReader的read()和readLine()的區(qū)別
BufferedReader的read()和readLine()區(qū)別
從一個有若干行deep文件中依次讀取各行,處理后輸出,如果用以下方法,則會出現(xiàn)除第一行外首字符丟失的現(xiàn)象
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這判斷條件上,因為在執(zhí)行這個條件的時候它已經(jīng)讀取了一個字符,然而在這里并沒有對讀取出來的這個字符做處理,所以會出現(xiàn)少一個字符,如果你這里寫的是while(br.readLine()!=null)會出現(xiàn)隔一行少一行。
建議使用一下方法
String str = null; while((str = br.readLine()) != null){ //System.out.println(str);//此時str就保存了一行字符串 }
這樣應(yīng)該就可以無字符丟失地得到一行了
小結(jié)一下
使用readLine()一定要注意
1:讀入的數(shù)據(jù)要注意有/r,/n或/r/n
2:沒有數(shù)據(jù)時會阻塞,在數(shù)據(jù)流異常或斷開時才會返回null
3:使用socket之類的數(shù)據(jù)流時,要避免使用readLine(),以免為了等待一個換行/回車而一直堵塞
項目經(jīng)驗
1.讀取一個txt文件,方法很多種我使用了字符流來讀?。榱朔奖悖?/p>
FileReader fr = new FileReader("f:\\TestJava.Java"); BufferedReader bf = new BufferedReader(fr); //這里進行讀取 int b; while((b=bf.read())!=-1){ System.out.println(bf.readLine()); }
發(fā)現(xiàn)每行的第一個字符都沒有顯示出來,原因呢:b=bf.read())!=-1 每次都會先讀取一個字節(jié)出來,所以后面的bf.readLine());讀取的就是每行少一個字節(jié)。所以,應(yīng)該使用
String valueString = null; while ((valueString=bf.readLine())!=null){ System.out.println(valueString); }
BufferedReader.readLine()總結(jié)
BufferedReader.readLine()
最近寫了段用于獲取執(zhí)行命令的返回值的代碼,如下:
while(br.readLine()!null) { msg=br.readLine(); }
然后顯示的結(jié)果卻是隔行輸出的。想了下, 應(yīng)該是每調(diào)用一次read()或者readLine(),指針都會移動的。所以得到的是隔行輸出。
正確的代碼如下
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); String msg = null; while((msg = br.readLine())!= null) { System.out.println(msg); }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring多數(shù)據(jù)源配置實現(xiàn)方法實例分析
這篇文章主要介紹了spring多數(shù)據(jù)源配置實現(xiàn)方法,結(jié)合實例形式分析了spring多數(shù)據(jù)源配置相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下2019-12-12