2

我有以下代码:

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();
}

当我运行这个程序时,我得到一个 null 的返回。也许我必须提升程序?帮助将不胜感激。

4

3 回答 3

2

改变:

 while(in.readLine()!=null)

到:

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

进而:

sb.append(s);

当您将代码调用in.readLine()两次时 - 您正在阅读两行但在每次迭代中只打印第二行。

于 2012-12-15T05:38:50.730 回答
1

你扔掉了每一条奇怪的线:

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

如果r.txt只包含一行,你会在 中得到字符串“null” 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);
}
于 2012-12-15T05:41:40.233 回答
0

你的代码

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

随之改变

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

 }
于 2012-12-15T05:43:38.210 回答