3

在 Java 中,如果给定的流是System.error ,我如何找到作为参数传递的流的名称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每次运行时都会发生变化。如果名称是固定的,我可以将其与标准输出和标准错误的已知名称进行比较。

4

3 回答 3

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
}
于 2012-11-20T15:32:54.993 回答
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);
}
于 2012-11-20T15:26:35.957 回答
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");
}
于 2012-11-20T15:33:05.190 回答