【问题标题】:Need Help In Writing To A File在写入文件时需要帮助
【发布时间】:2010-10-31 20:40:47
【问题描述】:

我有以下类写入文件但没有按我的意愿工作。我在 while 循环中调用 write 方法,以便将字符串写入新行。它只写入最后一个字符串。除了最后一个,前面的都不写了。

这是课程:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Writer {

 private static PrintWriter  outputStream = null;

 public Writer(String algorithmName){
  try {
   outputStream = new PrintWriter(new FileWriter(algorithmName+".txt"));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
     public  void write(String str){
        try {
                outputStream.append(str);
        }catch(Exception exc){

        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

示例代码:

Writer w = new Writer("filename");
for(int = i; i < 10; i++){
w.write(i);
}

在这种情况下,我得到了结果:

9

而不是

0
1
2
3
...
9

我做错了什么?

谢谢

【问题讨论】:

  • 您可能应该将您的类称为 Writer 以外的名称,因为已经有一个 java.io.Writer。只是为了避免不必要的歧义。

标签: java iostream


【解决方案1】:

您在每次写入操作后关闭输出流。您应该在写完所有内容后调用一次。

【讨论】:

  • 感谢您的回复。如何让每个字符串出现在单独的行上?我尝试在每个字符串后附加“\n”,但不起作用。
  • 如果是Windows系统,试试"\r\n"
【解决方案2】:

每次写入时,您都会关闭流,然后强制创建一个新文件,这就是为什么文件中的所有内容都是 9。

Writer output = new BufferedWriter(new FileWriter(algorithmName+".txt"));
try {
  for(int = i; i < 10; i++){
      output.write( i );
  }
}
finally {
  output.close();
}

【讨论】:

  • 谢谢。我希望每个字符串出现在单独的行上。我该怎么做?
  • 关闭流不会强制创建新文件。写入时引发异常,被空的catch块吞噬。
【解决方案3】:

我有点跑题了,向你推荐 Google Guava 库,因为它包含许多有用的日常功能。

使用它,您的问题的解决方案几乎是一条线:

for(int i = 0; i < 10; ++i) {
    Files.append(String.valueOf(i) + "\n", new File("filename"), Charsets.UTF_8);
}

编辑:您不应该在大循环中使用它,因为库可能每次都有效地打开和关闭文件。根本没有效率。

【讨论】:

  • 谢谢,但有没有办法用 Java 库做到这一点?
  • 恐怕你不能比只使用标准 Java 库做的更短。为了减少这样的样板代码,我们创建了 Google Guava 和 Apache Commons 等库。
【解决方案4】:

这里有几个严重的错误。你使用了一个标准的类名作为你自己的类名;正如其他人所指出的那样,您在每次写入后都关闭了流;当流应该是实例成员时,它是静态成员;你有一个空的 catch 块,它阻止你看到任何错误。永远不要那样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多