Javaでシステム変数値を取得するにはどうすればよいですか?


169

に存在するシステム変数値を取得するにはどうすればよいですか

MyComputer -> Properties -> Advanced -> Environment Variables -> System Variables

Javaで?

編集する

私はSystem.getenv()方法を使用しました。

あげれば印刷値です

System.out.println(System.getenv("JAVA_HOME"));

null私が作成したシステム変数に同じことを試みた場合、それは価値を示しています

System.out.println(System.getenv("DBE"));

5
要求プロセス(私の場合はNetBeans)を再起動してみてください。
Kotodid 2013

3
Eclipseからの再起動オプションが機能しないことを確認しました。アプリケーションを閉じて、再起動してください。
Yasin、2016年

1
IntelliJを再起動すると問題が解決しました。
Bhushan Karmarkar

システムを再起動するとうまくいきました。新しい変数が検出されないため、JVMは最初の起動時に値のキャッシュを保持している可能性があります。
sumitkanoje

回答:



52

明確にするために、システム変数は環境変数と同じです。ユーザー環境変数はユーザーごとに設定され、別のユーザーがログインするたびに異なります。システム全体の環境変数は、どのユーザーがログオンしても同じです。

Javaでシステム全体の変数またはユーザー変数の現在の値にアクセスするには、以下を参照してください。

String javaHome = System.getenv("JAVA_HOME");

環境変数の詳細については、このウィキペディアのページを参照してください

また、次のようにして、Javaを呼び出す前に、読み取ろうとしている環境変数が適切に設定されていることを確認してください。

echo %MYENVVAR%

環境変数の値が表示されます。そうでない場合は、シェル(DOS)を再度開くか、ログオフして再度ログオンする必要があります。


こんにちは。System.getenv()メソッドを使用しました。 "System.out.println(System.getenv(" JAVA_HOME "));を指定した場合の印刷値です。" そしてその私が私(「のSystem.out.println(System.getenv(」DBEによって作成されたシステム変数を与える場合はnull値を示す「));」
ラジャ

3
getenvgetEnv右ではなく小文字にする必要がありますか?
Pratik Khadloya 2014

1
私はecho %var%それを印刷する場合%var%。代わりに試してみるとecho $var、動作し、その環境変数の値が表示されます。私getenvはnullを返します。
dialex

3
@dialex %var%は、windows、$varunix / linux / MacOSシステムで使用されます。
Al-Mothafar 2017年

27

システム/環境のプロパティを取得する場合、いくつかの詳細事項があります。

最初にSystem.getenv(String)遡って導入され、非推奨になりました。非難(愚かには、IHMO)はJSE 1.4までずっと続きました。

これはしまったJSE 5に再導入します

これらは、Windowsの[環境変数]パネルを使用して設定されます。変数への変更は、現在のVMがシャットダウンされ、CMD.exeインスタンスが終了するまで取得されない場合があります。

環境プロパティとは対照的に、JavaにはJavaシステムプロパティもあり、からアクセスできますSystem.getProperties()。これらの変数は、一連のコマンドライン引数を使用してVMを起動するときに初期化できます。たとえば、プロパティとの値は、以下のコマンドで設定されます。-Dname=valuemaxInMemorypagingDirectory

C:\> java.exe -DmaxInMemory = 100M -DpagingDirectory = c:\ temp -jar myApp.jar

これらのプロパティは、セキュリティポリシーの制限を除いて、実行時に変更できます。


19

実際には変数を設定できるかどうかは不明です。そのため、Java 8以降では、null許容値をOptionalオブジェクトにラップする必要があります。これにより、非常に優れた機能を実現できます。次の例では、変数を取得しようとしますがENV_VAR1、存在しない場合は、カスタムの例外をスローして、そのことを警告することがあります。

String ENV_VAR1 = Optional.ofNullable(System.getenv("ENV_VAR1")).orElseThrow(
  () -> new CustomException("ENV_VAR1 is not set in the environment"));

5

グーグルはgetenv()をチェックアウトするように言います:

現在のシステム環境の変更不可能な文字列マップビューを返します。

ただし、システム変数が環境変数とどのように異なるのかはわかりません。そのため、はっきりさせていただければ、さらにお役に立てると思います。


rajaは、「ユーザーごとの」環境変数ではなく、「システム全体」を意味すると思います。
Rob、

3

環境変数を設定してから再起動してみましたか?

Windowsは環境変数を何らかのキャッシュに保持しているようで、再起動はそれを更新する1つの方法です。よくわかりませんが、別の方法があるかもしれませんが、変数の値を頻繁に変更しない場合は、これで十分です。


3

上記のsombodyで述べたように、ユーザー定義の環境変数でeclipseを再起動するとうまくいきました。日食IDEを再起動した後、System.getenv()が環境変数を取得しています。


0

Linuxシステムを使用していますか?その場合は、変数をエクスポートしていることを確認してください。

myVar=testvalue; export myVar

エクスポートを使用して値をグローバルに定義しない限り、nullになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.