将System.setOut设置为默认控制台和自定义输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将System.setOut设置为默认控制台和自定义输出相关的知识,希望对你有一定的参考价值。
我有一段这样的代码:
System.setOut(new PrintStream(new OutputStream()
{
@Override
public void write(int b) throws IOException
{
String str = String.valueOf((char) b);
txtAreaConsole.appendText(str);
}
}));
但这意味着,我不再在控制台中获得任何信息。所以我正在寻找这样的东西:
System.setOut(new PrintStream(new OutputStream()
{
@Override
public void write(int b) throws IOException
{
String str = String.valueOf((char) b);
txtAreaConsole.appendText(str);
defaultConsole.appendText(str); //THIS
}
}));
有什么相似的吗?谢谢
答案
当然可以,你只需要“保存”并重用现有的System.out。
我不知道你的代码中有什么txtAreaConsole,所以我在下面的例子中做了一个“MyConsole”:
import java.io.PrintStream;
import java.text.*;
public class Test {
public Test() {
System.setOut(new MySystemOut(System.out, new MyConsole()));
System.out.println("Hey");
}
class MyConsole {
public void appendText(String s) {
// write text somewhere else here
}
}
class MySystemOut extends PrintStream {
private final PrintStream out;
private final MyConsole txtAreaConsole;
public MySystemOut(PrintStream out, MyConsole txtAreaConsole) {
super(out);
this.out = out;
this.txtAreaConsole = txtAreaConsole;
}
@Override
public void write(int b) {
String str = String.valueOf((char) b);
txtAreaConsole.appendText(str);
out.write(b);
}
}
public static void main(String args[]) throws ParseException {
new Test();
}
}
另一答案
正如安德烈亚斯所说,来自TeeOutputStream的Apache Commons IO对我来说是最好的方式。
以上是关于将System.setOut设置为默认控制台和自定义输出的主要内容,如果未能解决你的问题,请参考以下文章