• ベストアンサー

環境変数の取得について

Javaプログラムで環境変数を取得することって可能ですか?? 例えば任意の環境変数%TEST%なんかを設定してから実行したら 取得可能ですか??(OSはUnix上です) もしくはプロパティファイルかなんか設定ファイルを使用しても良いと考えているのですが、Unix上でResourceBundleクラスを使用するとき、ファイルの配置場所はどこにあれば良いのでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

System.getPropertyはOSの環境変数にアクセスするメソッドではないと思います。JavaVMで用意しているプロパティに限定してアクセス可能なはずです。そのため質問者の期待する「任意の環境変数を設定した場合」には対応できないと思います。(必ずnullになってしまう) ゆえに、この場合にはSystem.getenvを使用せざるを得ないと思います。 (使用したことがないので自信なしですが、もしかしたらSystem.getPropertyでも「任意の環境変数」を取得する方法があるかもしれません。) System.getenvが推奨されない理由は、このメソッドがOSに直接アクセスしてしまうため、OS依存になってしまう点にあると思います。「Write Once, Run Anywhere(一度書けば、どこででも実行する)」に反するということです。しかし、動作環境を変更しどのOSでも動かしたいという希望がないのであれば、この非推奨の理由は無意味なものになると思います。 結論として、System.getPropertyは使用できない。System.getenvは非推奨であっても気にせず使用してかまわないということになると思います。 5.0で、非推奨でなくなった理由はよくわかりません。が、代替方法がなく、また場合により必要になることもあるため、「非推奨」の意味を見直した結果なのかなーなどと思います。 >Unix上でResourceBundleクラスを使用するとき、ファイルの配置場所はどこにあれば良いのでしょうか?? クラスファイルと同じディレクトリです。相対パスでの記述も可能です。気をつけなければならないのは、ResourceBundle.getBundleで指定するのは拡張子なしのファイル名を指定することと、実ファイルには「properties」という拡張子をつけなければならないことでしょうか。また、ResourceBundleは多言語対応も可ですが、ここでは関係なさそうなので説明は省きます。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#getProperties()

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>obsolete #2様 私は、javaの経験が少ないのでご指摘ありがたく思います。(勉強になります) でも http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/System.html#getenv(java.lang.String) 1.4のdocsでは非推奨ですが http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#getenv(java.lang.String) 1.5のdocsでは非推奨ではありません。 ケースバイケースだと思われますが・

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

No.1さん、わざわざobsoleteなメソッドを教えんでも。 Javadocを見れば書いてますが、Java1.2以降では代わりにSystem.getPropertyを使いましょう。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>環境変数を取得 System.getenv(String name) できると思います。 System.getenv("TEST"); UNIXの場合大文字小文字を区別するらしいので注意