0

次のコードでは:

    for(int i = 5; i  <= 100; i+=5)
    {
        linearSurprise(i); // Function calling 'System.out.print()'

        System.setOut(outStream); // Reassigns the "standard" output stream.

        System.out.println("Value of i: " + i); // Outputting the value to the .txt file.

        outStream.close(); // 'outStrem' is closed so that when I recall my function, output will 
                           // will be sent to the console and not file.

      // After debugging, I notice that nothing is being displayed to either the console or file, 
      // but everything else is still working fine. 
    }

関数「linearSurprise」を呼び出しており、その関数でコンソールに情報を出力しています。関数呼び出しが終了したら、'i' の値をテキスト ファイルにリダイレクトします。これはループの最初の反復で機能しますが、「outStream.close()」を呼び出すとすぐに、次の反復 (コンソールまたはファイル) で何も出力が表示されません。なぜこれが起こっているのか誰にも分かりますか?また、この問題の回避策は何ですか?

4

7 に答える 7

2

この仮定は無効です:

「outStrem」は閉じられているため、関数をリコールすると、出力はファイルではなくコンソールに送信されます。

なぜ魔法のようにコンソールに戻るのでしょうか? 代わりに閉じたストリームに書き込まれるだけで、 によって飲み込まれる例外が発生しますPrintStream

元のコンソール ストリームに戻したい場合は、明示的に行う必要があります。

PrintStream originalOutput = System.out;

// Do stuff...

System.setOut(originalOutput); // Now we can write back to the console again
于 2013-09-27T13:35:29.887 に答える
2

あなたはあなたのループの内側を閉じていて、今閉じています。さらに出力を書き込めるようにするには、オープンを再割り当てする必要があります。OutputStream System.outOutputStream

FileOutputStreamこの目的のために、代わりに に直接書き込む必要があります。リダイレクトSystem.outしても意味がなく、このような問題が発生します。

PrintStream outStream = new PrintStream(File outputFile);
for(int i = 5; i <= 100; i += 5)
{
    linearSurprise(i);
    outStream.println("Value of i: " + i);
}
outStream.close();
于 2013-09-27T13:34:34.510 に答える
1
System.setOut(outStream); // Reassigns the "standard" output stream.
for(int i = 5; i  <= 100; i+=5)
    {
        linearSurprise(i); // Function call


        System.out.println("Value of i: " + i); // Outputting the value to the .txt file.

will 
                           // will be sent to the console and not file.

      // After debugging, I notice that nothing is being displayed to either the console or file, 
      // but everything else is still working fine. 
    }
    outStream.close(); // 'outStrem' is closed so that when I recall my function, output 

1回の反復の後ではなく、書き込みが終了した後にoutStreamを閉じると、動作するはずです。

于 2013-09-27T13:35:51.333 に答える
1

ループ後にファイルを閉じます

outStream.close();
于 2013-09-27T13:34:42.633 に答える
0

ループ内outStream.flush()の代わりに 試すことができます。outStream.close()それはうまくいくかもしれません。AsoutStream.close(); はファイルを閉じます。ループの完了後に閉じることをお勧めします。

于 2013-09-27T13:34:23.653 に答える
0

CLose() を呼び出すと、ストリームが破棄され、存在しなくなります

于 2013-09-27T13:34:40.000 に答える