Javaを使ったプログラムででエラーが起こった時に使っていたJavaのバージョンやOSの環境が知りたいことはよくある。
その度に確認するのも大変だよね。
なので、プログラムの起動時にSystem propertiesの値をログなんかに出力しておくといいかもしれない。
単純に標準出力に出力するのであれば、以下のようにすればいい。
PropertiesSample.java
Stringとして取り出したいのであれば、Propertiesクラス自体がMapを実装しているので、イテレートして取り出せばいい。
ここで、Stringとして取り出すもうひとつの方法を考えよう。
もし、PropertiesクラスがMapを実装しておらず、listメソッドしか持っていなかった場合、どうなるだろうか。
そんな場合はOutputStreamの出力先をバッファにして、そこからStringとして取り出せばいい。
そのためにはByteArrayOutputStreamを出力先として使う。
Properties::listメソッドはPrintStreamを受け付けるため、ByteArrayOutputStreamそのままではなく、PrintStreamのコンストラクタにByteArrayOutputStreamを渡す。
PropertiesSample2.java
その度に確認するのも大変だよね。
なので、プログラムの起動時にSystem propertiesの値をログなんかに出力しておくといいかもしれない。
単純に標準出力に出力するのであれば、以下のようにすればいい。
PropertiesSample.java
class PropertiesSample { public static void main(String ... args) { System.getProperties().list(System.out); } }
Stringとして取り出したいのであれば、Propertiesクラス自体がMapを実装しているので、イテレートして取り出せばいい。
ここで、Stringとして取り出すもうひとつの方法を考えよう。
もし、PropertiesクラスがMapを実装しておらず、listメソッドしか持っていなかった場合、どうなるだろうか。
そんな場合はOutputStreamの出力先をバッファにして、そこからStringとして取り出せばいい。
そのためにはByteArrayOutputStreamを出力先として使う。
Properties::listメソッドはPrintStreamを受け付けるため、ByteArrayOutputStreamそのままではなく、PrintStreamのコンストラクタにByteArrayOutputStreamを渡す。
PropertiesSample2.java
import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.io.IOException; class PropertiesSample2 { public static void main(String ... args) { try (ByteArrayOutputStream bs = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(bs)) { System.getProperties().list(ps); String properties = bs.toString("UTF-8"); System.out.println(properties); } catch (IOException e) { e.printStackTrace(); } } }
0 件のコメント:
コメントを投稿