【问题标题】:Setting standard output stream to default in java在java中将标准输出流设置为默认值
【发布时间】:2015-12-13 09:55:13
【问题描述】:

我浏览了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();
    }

'Hey bro' 正在打印到文件中。为什么它不会恢复默认值? Prinstream 构造函数查找类型 OutputStream。由于 PrintStream 是 OutputStream 的间接子类,我直接传递了 System.out。它没有显示任何错误,唯一的问题是它不会回到默认值。 有人可以帮忙吗?

【问题讨论】:

  • PrintStream j1=new PrintStream (System.out); 你之前已经将 System.out 设置为 PrintStream j 所以它不会得到默认的
  • @Yazan 我将它设置回 j1,它指向默认值 - (System.out)。为什么我无法更改它?
  • 重点是,您已将 System.out 从默认值更改为 j,所以现在当您调用 System.out 时,它将是 j 而不是默认值。
  • 好的。非常感谢。 @亚赞

标签: java


【解决方案1】:

您所做的是,非常简单:

stdout = file;
stdout = stdout;

所以它没有设置为原始版本也就不足为奇了。

您需要将原始标准输出流保存在一个临时变量中,然后将其分配回System.out。像这样的:

PrintStream originalStdout = System.out;
System.setOut(j);
// do your printing...
// and revert
System.setOut(originalStdout);

【讨论】:

  • 非常感谢。我明白了!
【解决方案2】:

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();
    }

【讨论】:

  • PrintStream originalStream = System.out;此语句在将其设置为 j.right 之前将默认值保存在 originalStream 中?
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多