1

我正在制作一个接受 10 个字符串并将它们发送到文本文件的程序。但是,我的问题是它只是覆盖了文件中存在的任何先前值。任何想法如何防止它被覆盖?我的程序如下:

import java.io.*;
public class TEST
{
    public static void main(String args[])throws IOException
    {
        InputStreamReader read=new InputStreamReader(System.in);
        BufferedReader in=new BufferedReader(read);
        int a;
        String x;
        for (a=1; a<=10; a++)
        {
            System.out.println("Please enter a word.");
            x=in.readLine();
            PrintStream konsole = System.out;
            System.setOut(new PrintStream("TEST.txt"));
            System.out.println(x);
            System.setOut(konsole);
        }
        System.out.println("DONE");
    }
}
4

2 回答 2

1

尝试写入输出流(不是重定向的System.out)。

FileOutputStreams您可以选择是否要附加到文件或写入新文件(构造函数中的布尔值,请查看 JavaDoc)。尝试使用此代码为文件创建一个输出流,该文件不会覆盖该文件,而是附加到该文件。

OutputStream out = new FileOutputStream(new File("Test.txt"), true);

还要确保不要在循环的每次迭代中创建 Stream,而是在循环开始时创建。

如果您在循环之后(在 finally 块中)也关闭了输出流,那么您应该没问题。

于 2013-11-13T13:38:07.567 回答
0

这应该适合你:

public static void main(String[] args) throws IOException {

    InputStreamReader read=new InputStreamReader(System.in);
    BufferedReader in=new BufferedReader(read);
    OutputStream out = new FileOutputStream(new File("TEST.txt"), true);

    for (int a=1; a<=10; a++)
    {
        System.out.println("Please enter a word.");
        out.write(in.readLine().getBytes());
        out.write(System.lineSeparator().getBytes());
    }

    out.close();
    System.out.println("DONE");
}
于 2013-11-13T13:46:53.493 回答