簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM