在Java中,如果给定的流是System.err
或System.out
,我怎样才能找到作为参数传递的流的名称?
public String getStreamName(OutputStream arg0) {
String streamName = ????;
return "This is stream: " + streamName;
}
应该返回类似的内容:
This is stream: System.err
我已经尝试了arg0.toString()
,但这似乎没用,因为返回的名称类似于java.io.PrintStream@71cb25
,并且每次运行都会发生变化。如果名称已修复,我可以将它与stdout和stderr的已知名称进行比较。
答案 0 :(得分:3)
System.out和System.err都是PrintStream的实例。打印流和输出流没有可用于区分它们的属性。
API文档显示了可用的内容:
http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html
http://docs.oracle.com/javase/6/docs/api/java/io/OutputStream.html
在这种情况下,你可以检查它是否= = System.out或System.err:
if (arg0 == System.out) {
} else if (arg0 == System.err) {
} else {
// it is another output stream
}
答案 1 :(得分:2)
试试这个:
public void printStreamName(OutputStream stream) {
String streamName = "Other";
if(stream instanceof PrintStream) {
streamName = stream == System.err ? "System.err" : (stream == System.out ? "System.out" : "Other");
}
System.out.println("This is stream: " + streamName);
}
答案 2 :(得分:2)
也许不是最好的解决方案,但它确实有效。
public String getStreamName(OutputStream arg0) {
boolean lol = arg0.equals(System.err);
String streamName;
if(lol) streamName = "System.err";
else streamName = "System.out";
return "This is stream: " + streamName;
}
编辑:
public String getStreamName(OutputStream arg0)
{
return "This is stream: " + ((arg0.equals(System.err)) ? "System.err" : "System.out");
}