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.out现在已关闭;您必须重新为其分配一个 openOutputStream才能写入更多输出。

为此,您确实应该直接写信给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 

如果您在完成写入后关闭 outStream 而不是在一次迭代后关闭它应该可以工作。

于 2013-09-27T13:35:51.333 回答
1

循环后关闭文件

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

您可以尝试outStream.flush()而不是 outStream.close()内部循环。它可能会起作用。outStream.close(); 将关闭您的文件。最好在循环完成后关闭。

于 2013-09-27T13:34:23.653 回答
0

由于您调用 CLose() 流已被处置,因此不再存在

于 2013-09-27T13:34:40.000 回答
0

打印到文件如下:

outStream.println("What ever you want");

并在循环后关闭流。

不要设置输出(outStream);

于 2013-09-27T13:50:09.883 回答