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