如何在java中获取输出流的名称(即stderr或stdout)?

时间:2012-11-20 15:22:56

标签: java outputstream

在Java中,如果给定的流是System.errSystem.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的已知名称进行比较。

3 个答案:

答案 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");
}