在写入文件时需要帮助

时间:2010-10-31 20:40:48

标签: java iostream

我有以下类写入文件,但不能正常工作。我在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

我做错了什么?

感谢

4 个答案:

答案 0 :(得分:1)

每次写入操作后都会关闭输出流。你写完一切之后应该给它打电话一次。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我会有点偏离主题并向您推荐Google Guava库,因为它包含许多有用的日常功能。

使用它,你的问题的解决方案几乎成了一个单线:

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

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

答案 3 :(得分:0)

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