我浏览了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。它没有向我显示任何错误,唯一的问题是它没有回到默认值。 有人可以帮忙吗?
答案 0 :(得分:2)
你正在做的是,非常简单:
stdout = file;
stdout = stdout;
所以不要惊讶它没有被设置为原始版本。
您需要将原始标准输出流保存在临时变量中,然后将其分配回System.out
。像这样:
PrintStream originalStdout = System.out;
System.setOut(j);
// do your printing...
// and revert
System.setOut(originalStdout);
答案 1 :(得分:1)
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();
}