关闭输出流'行为不端'?

时间:2013-09-27 13:31:53

标签: java

在以下代码中:

    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()',在下一次迭代(控制台或文件)中就不会显示任何输出。有谁知道为什么会这样?还有什么可以解决这个问题呢?

7 个答案:

答案 0 :(得分:2)

关闭你的循环内的OutputStream System.out现已关闭;你必须重新分配一个开放的OutputStream才能写出更多的输出。

为此,你真的应该直接写到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();

答案 1 :(得分:2)

这个假设无效:

  

'outStrem'已关闭,因此当我回想起我的功能时,将发送输出   到控制台而不是文件。

为什么它会神奇地回到控制台?它只会写入一个封闭的流,这将导致PrintStream吞噬的异常。

如果要将其设置回原始控制台流,则需要明确地执行此操作:

PrintStream originalOutput = System.out;

// Do stuff...

System.setOut(originalOutput); // Now we can write back to the console again

答案 2 :(得分:1)

循环后关闭文件

outStream.close();

答案 3 :(得分: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而不是在一次迭代之后它应该可以工作。

答案 4 :(得分:0)

您可以在循环内尝试outStream.flush()而不是outStream.close()。它可能会奏效。由于outStream.close();会关闭您的文件。最好在循环完成后关闭。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

按如下方式打印到文件:

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

循环后关闭流。

不要setOut(outStream);