我有以下类写入文件,但不能正常工作。我在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
我做错了什么?
感谢
答案 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块阻止你看到任何错误。永远不要那样做。