Java'da Sistem değişkeni değerini nasıl alabilirim?


170

İçinde bulunan Sistem Değişkeni değerini nasıl alabilirim

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

Java?

Düzenle

System.getenv()Metod kullandım .

Verirsem baskı değeri

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

ve nullbenim oluşturduğum sistem değişkeni için de aynı şeyi denersem değer gösteriyor

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

5
İstekte bulunan işlemi yeniden başlatmayı deneyebilirsiniz (benim durumumda NetBeans).
Kotodid

3
Tutulmadan yeniden başlatma seçeneğinin çalışmadığını gözlemledim. Uygulamayı kapatıp tekrar başlatmanız yeterlidir.
Yasin

1
IntelliJ'i yeniden başlatmak sorunumu çözdü.
Bhushan Karmarkar

Benim için çalıştığım sistemi yeniden başlatmak, JVM'nin yeni değişkenlerin algılanmadığı için değerlerin önbelleğini ilk başlangıçta tutması olabilir.
sumitkanoje

Yanıtlar:



52

Açıklığa kavuşturmak için, sistem değişkenleri ortam değişkenleriyle aynıdır. Kullanıcı ortamı değişkenleri kullanıcı başına ayarlanır ve farklı bir kullanıcı oturum açtığında farklıdır. Hangi kullanıcı oturum açarsa açsın sistem genelindeki ortam değişkenleri aynıdır.

Sistem genelindeki bir değişkenin veya Java'daki bir kullanıcı değişkeninin geçerli değerine erişmek için aşağıya bakın:

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

Ortam değişkenleri hakkında daha fazla bilgi için bu wikipedia sayfasına bakınız .

Ayrıca aşağıdakileri yaparak Java'yı çağırmadan önce okumaya çalıştığınız ortam değişkeninin doğru ayarlandığından emin olun:

echo %MYENVVAR%

Ortam değişkeninin değerini görmelisiniz. Değilse, kabuğu (DOS) yeniden açmanız veya oturumu kapatıp tekrar açmanız gerekebilir.


Merhaba .. System.getenv () yöntemini kullandım .. "System.out.println (System.getenv (" JAVA_HOME "));" ve benim oluşturduğum sistem değişkeni verirseniz null değerini gösteriyor ("System.out.println (System.getenv (" DBE "));"
raja

3
getenvyerine küçük bir durumda olmalı getEnv?
Pratik Khadloya

1
Eğer yaparsam echo %var%yazdırır %var%. Bunun yerine çalışırsam echo $varçalışır ve bu env değişkeninin değerini görüntüler. Benim getenvnull döndürüyor.
dialex

3
@dialex %var%, windows, $varunix / linux / MacOS sistemleri için kullanılır.
Al-Mothafar

27

Sistem / ortam özelliklerini alırken ilgi çekici birkaç ayrıntı vardır.

İlk olarak, System.getenv(String)ne zaman geri getirildi, sonra kullanımdan kaldırıldı. Kullanımdan kaldırma (aptalca, IHMO) JSE 1.4'e kadar devam etti .

O var JSE 5 yeniden tanıtıldı .

Bunlar, Windows'daki Ortam Değişkenleri paneli kullanılarak ayarlanır. Geçerli VM'niz kapanana ve CMD.exe örneğinden çıkılıncaya kadar değişkenlerde yapılan değişiklikler alınamayabilir.

Ortam özelliklerinin aksine Java, Java sistem özelliklerine de erişebilir System.getProperties(). Bu değişkenler, VM bir dizi komut satırı argümanı kullanılarak başlatıldığında başlatılabilir . Örneğin, özelliklerin değerleri ve aşağıdaki komutta ayarlanır:-Dname=valuemaxInMemorypagingDirectory

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

Bu özellikler, güvenlik ilkesi kısıtlamalarını engelleyerek çalışma zamanında değiştirilebilir.


19

Aslında değişken ayarlanabilir veya ayarlanamaz, bu nedenle Java 8 veya üst sürümlerinde null değeri Optional, gerçekten iyi özelliklere izin veren bir nesneye sarılmalıdır . Aşağıdaki örnekte değişkeni elde etmeye çalışacağız ENV_VAR1, eğer mevcut değilse, uyarmak için bazı özel istisnalar atabiliriz:

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

5

Google getenv () ' e göz atmasını söylüyor :

Geçerli sistem ortamının değiştirilemez dize eşlemi görünümünü döndürür.

Ancak sistem değişkenlerinin ortam değişkenlerinden nasıl farklı olduğundan emin değilim.


Bence raja, "kullanıcı başına" ortam değişkenlerinin aksine "sistem çapında" anlamına gelir.
Rob

3

Ortam değişkenini ayarladığınızdan bu yana yeniden başlatmayı denediniz mi?

Windows'un ortam değişkenini bir tür önbellekte tuttuğu ve yeniden başlatmanın onu yenilemek için bir yöntem olduğu anlaşılıyor. Emin değilim ama farklı bir yöntem olabilir, ancak değişken değerini çok sık değiştirmeyecekseniz, bu yeterince iyi olabilir.


3

Yukarıdaki kişi tarafından belirtildiği gibi, tutulmanın yeniden başlatılması benim için kullanıcı tanımlı ortam değişkeni için çalıştı. Eclipse IDE yeniden başlatıldıktan sonra System.getenv()ortam değişkenimi alıyor.


0

Linux sisteminde misin? Öyleyse değişkeninizi dışa aktardığınızdan emin olun.

myVar=testvalue; export myVar

Global olarak değeri tanımlamak için export kullanmazsam null olurum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.