[英]Error output stream is concurrent with standard output stream when printing in Java
[英]Setting standard output stream to default in java
我瀏覽了java API文檔。我擺弄了一些函數和類,發現了一些奇怪的東西。我寫的以下代碼並沒有將標准輸出流設置為默認值(System.out)。 首先,我將標准輸出目標設置為一個文件,然后我嘗試重置它,但它繼續寫入文件。
try
{
file=new FileOutputStream("mamamia.txt",true);
//j=new BufferedOutputStream(file);
j=new PrintStream (file);
//byte[] b={49,50,44,67,44,23,57,32};
//j.write(b,0,5);
System.setOut(j);
System.out.println("hey mama mia");
System.out.println("hello gigs");
PrintStream j1=new PrintStream (System.out);
System.setOut(j1);
System.out.println("Hey bro");
j.flush();
file.flush();
file.close();
j.close();
}
'嘿兄弟'正在打印在文件中。為什么它不會恢復到默認狀態? Prinstream構造函數查找類型OutputStream.Since PrintStream是OutputStream的間接子類,我直接傳遞了System.out。它沒有向我顯示任何錯誤,唯一的問題是它沒有回到默認值。 有人可以幫忙嗎?
你正在做的是,非常簡單:
stdout = file;
stdout = stdout;
所以毫不奇怪它不是原來的。
您需要將原始標准輸出流保存在臨時變量中,然后將其分配回System.out
。 像這樣的東西:
PrintStream originalStdout = System.out;
System.setOut(j);
// do your printing...
// and revert
System.setOut(originalStdout);
System.setOut(j1);
在這里,您將System.out設置為已鏈接到的打印流,即文件一。
您應該首先存儲原始System.out打印流,然后在完成后重新生成此原始打印流,例如:
try
{
file=new FileOutputStream("mamamia.txt",true);
//j=new BufferedOutputStream(file);
j=new PrintStream (file);
//byte[] b={49,50,44,67,44,23,57,32};
//j.write(b,0,5);
PrintStream originalStream = System.out;
System.setOut(j);
System.out.println("hey mama mia");
System.out.println("hello gigs");
System.setOut(originalStream );
System.out.println("Hey bro");
j.flush();
file.flush();
file.close();
j.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.