文件写入器覆盖文件而不是追加到末尾的问题。

14

好的,我在写入文本文件时遇到了一些麻烦。

程序可以运行,但每次都不会换行。

当我想要运行4次时,文本文件应该如下所示:

a
b
c
d

相反,它看起来像:

d

谁知道如何解决这个问题?所有导入都已经正确地导入了。

源代码(已稍作编辑,假设所有定义都是正确的):

import java.io.*;
public class Compiler {
public static void main (String args[]) throws IOException
{
    //there's lots of code here
    BufferedWriter outStream= new BufferedWriter(new FileWriter("output.txt"));
    outStream.newLine();
    outStream.write(output);
    outStream.close();
}

}

1
只是提醒一下,这个问题非常接近于“代码是什么”的问题。然而,由于你并没有简单地寻求帮助(你展示了你已经做了什么),我会睁一只眼闭一只眼。 - Jonathan Pitre
output 未定义,所以显然无法编译。我假设它会运行4次,每次用字母表中后续的字母设置 output。如果 output 的值是 "a\nb\n\c\nd\n", 那么显然解决方案将大不相同。 - Collin Bell
3个回答

26

确保在创建 FileWriter 实例时,将其追加到文件末尾。可以通过使用这个特定的 FileWriter 构造函数来完成此操作,该构造函数接受一个额外的 boolean 作为第二个参数。 这个 boolean 告诉 FileWriter 将内容追加到文件末尾,而不是覆盖文件。

BufferedWriter outStream= new BufferedWriter(new FileWriter("encoded.txt", true));

我对Java的输入和输出还有点陌生,能给我一个例子吗?我现在不是测试的理想场所(这个工作站上没有JDK或IDE)。 - Azulflame
1
我的回答已经提供了你需要应用的更改,以使其正常工作。 - nicholas.hauschild
我写下这句话时,里面还没有任何代码。谢谢你的回答。 - Azulflame
我正在使用第二个参数为true,在应用程序的同一运行中它很好地追加。但是当我再次启动相同的应用程序(第二个参数为true)时,它会销毁上一个运行会话的所有信息,然后再次很好地追加... 当我尝试实现自己的原始记录器并希望在日志中保留所有信息时... 有什么线索吗? - user1551853

6

默认情况下,FileWriter会覆盖文件。您可能想要按照以下方式定义读取器:
new FileWriter("encoded.txt", true)
这样文件将被追加而不是覆盖

希望这能帮到您!


0

我不确定这段代码应该做什么。如果你的输入字符串超过一个字符长,它会抛出错误,因为你在循环内关闭了FileWriter,然后又尝试写入它。

我理解你的问题如下:你想知道为什么只有最新的输出结果在文件中。在这种情况下,那是因为你没有以追加模式创建FileWriter。看一下FileWriter提供的不同构造函数,并使用允许你追加到文件的那个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接