2012-12-15 128 views
1

我有以下代碼:的readLine()返回null

public static void main(String[] args) throws Exception { 
    String s = ""; 
    StringBuilder sb = new StringBuilder(); 
    File file = new File("C:\\New\\r.txt"); 

    BufferedReader in = new BufferedReader(new FileReader(file)); 
    while(in.readLine() != null) {  
     sb.append(in.readLine()); 
    } 

    System.out.println(sb); 
    s = sb.toString(); 
    byte[] b = s.getBytes(); 

    for(int i = 0; i < b.length; i++) { 
     if(b[i] == 1){ b[i]=0; } 
     if(b[i] == 0){ b[i]=1; } 
    } 

    FileOutputStream fos = new FileOutputStream(file); 
    DataOutputStream dos = new DataOutputStream(fos); 
    dos.write(b); 
    in.close(); 
    fos.close(); 
    dos.close(); 
} 

我得到空的回報,當我運行這個程序。也許我必須提升該計劃?幫助將不勝感激。

+1

這個程序不會 '迴歸' 什麼。將堆棧跟蹤添加到您的問題。另外,爲什麼要將輸入文件中的所有字節翻轉爲'1'值? – Perception

回答

1

變化:

while(in.readLine()!=null) 

到:

while((s = in.readLine())!=null) 

然後:

sb.append(s); 

當您在代碼中調用兩次到in.readLine() - 你讀兩行,但印刷每次迭代中只有第二個。

+1

打我吧:) –

+0

我懷疑's'是字符串。所以如何檢查沒有布爾類型我可能是錯誤的。@ alfasin – gks

+1

@ alfasin,你的代碼顯示語法錯誤 –

1

你把自己的每一個奇數行:

while(in.readLine()!=null) 
{  
    sb.append(in.readLine()); 
} 

如果r.txt只包含一條線,你會得到在StringBuffer字符串「空」,因爲StringBuffer.append第一行做到這一點:

public AbstractStringBuilder append(String str) { 
    if (str == null) str = "null"; 
    .... 
} 

如果有兩行,您將在行尾獲得第一行帶有「null」的行。

下面將文件中的所有行追加到StringBuffer

String line = null; 
while((line = in.readLine()) != null) 
{  
    sb.append(line); 
} 
0

你的代碼與它

while(in.readLine() != null) {  
     sb.append(in.readLine()); 
    } 

變化

while ((s = in.readLine()) != null) 
{    
    sb.append(s); 

}