Bagaimana saya bisa mendapatkan nilai variabel Sistem di Java?

169

Bagaimana saya bisa mendapatkan nilai System Variable yang ada di

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

di Jawa?

Edit

Saya telah menggunakan System.getenv()metode.

Ini adalah nilai pencetakan jika saya berikan

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

dan itu menunjukkan nullnilai jika saya mencoba hal yang sama untuk variabel sistem yang dibuat oleh saya

System.out.println(System.getenv("DBE"));
raja
sumber
5
Anda dapat mencoba memulai kembali proses meminta (NetBeans dalam kasus saya).
Kotodid
3
Saya telah mengamati bahwa opsi restart dari gerhana tidak berfungsi. Tutup saja aplikasinya, dan mulai lagi.
Yasin
1
Restart IntelliJ memecahkan masalah saya.
Bhushan Karmarkar
Restart sistem bekerja untuk saya, mungkin JVM menyimpan cache nilai pada awal pertama karena variabel baru tidak terdeteksi.
sumitkanoje

Jawaban:

52

Untuk memperjelas, variabel sistem sama dengan variabel lingkungan. Variabel lingkungan pengguna disetel per pengguna dan berbeda setiap kali ada pengguna yang berbeda. Variabel lingkungan sistem yang sama tidak peduli apa pun yang pengguna gunakan.

Untuk mengakses nilai saat ini dari variabel lebar sistem atau variabel pengguna di Jawa, lihat di bawah:

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

Untuk informasi lebih lanjut tentang variabel lingkungan, lihat halaman wikipedia ini .

Pastikan juga variabel lingkungan yang Anda coba baca sudah diatur dengan benar sebelum memanggil Java dengan melakukan:

echo %MYENVVAR%

Anda harus melihat nilai variabel lingkungan. Jika tidak, Anda mungkin perlu membuka kembali shell (DOS) atau keluar dan masuk kembali.

Elia
sumber
Hai .. Saya telah menggunakan metode System.getenv () .. Ini mencetak nilai jika saya memberikan "System.out.println (System.getenv (" JAVA_HOME "));" dan itu menunjukkan nilai nol jika saya memberikan variabel sistem yang dibuat oleh saya ("System.out.println (System.getenv (" DBE "));"
raja
3
getenvharus dalam kasus kecil, bukan getEnvbenar?
Pratik Khadloya
1
Jika saya echo %var%mencetaknya %var%. Jika saya mencoba, echo $varitu berfungsi dan menampilkan nilai variabel env itu. Saya getenvmengembalikan nol.
Dialex
3
@dialex %var%digunakan untuk windows, $varuntuk sistem unix / linux / MacOS.
Al-Mothafar
27

Ada beberapa detail yang menarik ketika mendapatkan properti sistem / lingkungan.

Pertama, System.getenv(String)diperkenalkan cara kembali-saat, kemudian ditinggalkan. Penghentian (bodohnya, IHMO) terus berlanjut hingga JSE 1.4 .

Itu kembali diperkenalkan di BEJ 5 .

Itu diatur menggunakan panel Variabel Lingkungan di Windows. Perubahan pada variabel mungkin tidak diambil sampai VM Anda saat ini dimatikan, dan instance CMD.exe keluar.

Berbeda dengan properti lingkungan, Java juga memiliki properti sistem Java, dapat diakses melalui System.getProperties(). Variabel-variabel ini dapat diinisialisasi ketika VM mulai menggunakan argumen baris perintah seri . Misalnya, nilai untuk properti dan-Dname=valuemaxInMemorypagingDirectory diatur dalam perintah di bawah ini:

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

Properti ini dapat dimodifikasi saat runtime, kecuali pembatasan kebijakan keamanan.

Dilum Ranatunga
sumber
19

Sebenarnya variabel dapat diatur atau tidak, jadi, di Java 8 atau lebih tinggi nilai nullable-nya harus dibungkus menjadi Optionalobjek, yang memungkinkan fitur yang sangat bagus. Dalam contoh berikut, kami akan mencoba mendapatkan variabel ENV_VAR1, jika tidak ada, kami dapat membuang beberapa Pengecualian khusus untuk mengingatkan tentang hal itu:

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

Google mengatakan untuk memeriksa getenv () :

Mengembalikan tampilan peta string yang tidak dapat dimodifikasi dari lingkungan sistem saat ini.

Saya tidak yakin bagaimana variabel sistem berbeda dari variabel lingkungan, jadi jika Anda bisa mengklarifikasi saya bisa membantu lebih banyak.

Chris Bunch
sumber
Saya pikir raja berarti "sistem-lebar" yang bertentangan dengan variabel lingkungan "per-pengguna".
Rob
3

Sudahkah Anda mencoba me-reboot sejak Anda mengatur variabel lingkungan?

Tampaknya Windows menyimpan variabel lingkungannya dalam beberapa jenis cache, dan me-reboot adalah salah satu metode untuk menyegarkannya. Saya tidak yakin tetapi mungkin ada metode yang berbeda, tetapi jika Anda tidak akan terlalu sering mengubah nilai variabel Anda, ini mungkin cukup baik.

trilobite
sumber
3

Seperti yang disebutkan oleh sombody di atas, restart gerhana bekerja untuk saya untuk variabel lingkungan yang ditentukan pengguna. Setelah saya restart IDE gerhana, System.getenv()mengambil variabel lingkungan saya.

voidMainReturn
sumber
0

Apakah Anda menggunakan sistem linux? Jika demikian, pastikan Anda mengekspor variabel Anda.

myVar=testvalue; export myVar

Saya mendapatkan nol kecuali jika saya menggunakan ekspor untuk menentukan nilai secara global.

keving
sumber