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);

また、ループのすべての反復でストリームを作成するのではなく、ループの開始時に必ず作成してください。

ループの後 (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 に答える