0

出力をファイルに書き込んでください。動作させることができません。System.out.printlnを使用すると、機能します。実際のメソッドでファイルストリームとBufferedWriterを作成すると、ファイルは作成されますが、何も書き込まれません。私のメソッドは再帰的であり、メソッドが再度自分自身を呼び出すたびに新しいファイルを作成するためだと思います。そこで、別の印刷メソッドを作成し、文字列値key [i]を文字列パラメーターとして使用しましたが、何も実行されません。

どんな助けでもありがたいです、ありがとう。

 public void print(String s)throws IOException
{
    fstream = new FileWriter("out.txt", true);
    out = new BufferedWriter(fstream);

    try{
        out.write("From print: " + s + " ");
        out.close();
    }catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
}

public void generate() throws IOException
{ 
    while (k<randomWordNum())
    {
        if (randomNum() <= sumOfFreq[0])
        {
            //System.out.println(getKey[0] + " "); 
            print(getKey[i]);
            i++;
            k++;
            generate();
        }
        if (randomNum() >= sumOfFreq[i] && randomNum() <= sumOfFreq[i+1])
        {
            //System.out.println("From generate: " + getKey[i+1] + " "); 
            print(getKey[i+1]);
            i++;
            k++;
            generate();
        }
        else
        {
            i++;
            generate();
        }
    }//while
}//generate
4

2 に答える 2

3

物事が確実に書き込まれるように、ファイルを.closeする必要があります

于 2012-12-09T18:35:36.450 に答える
1

FileWriterのコンストラクタがファイルを上書きすると思います。したがって、次のようなコード行を使用する必要があります。

fstream = new FileWriter("out.txt", true); // true for appending

また、スコープ外になる前に必ずファイルを閉じてください。そうしないと、運が悪ければファイルがフラッシュされたり閉じられたりすることはありません...

そしてもう1つ、それがデバッグ/トラブルシューティングコードのようなものではないと仮定すると、「決して」キャッチしませんException。捕まえた場合は、ログに記録した後、または何をした場合でも、入手したとおりに再スローしてください。ただし、一般的に、常により具体的な例外タイプをキャッチします。

于 2012-12-09T18:49:35.013 に答える