3

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 の既知の名前と比較できます。

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  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 に答える
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 に答える