मैं जावा में सिस्टम चर मान कैसे प्राप्त कर सकता हूं?


169

मैं सिस्टम चर मूल्य कैसे प्राप्त कर सकता हूं जो इसमें मौजूद है

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

जावा में?

संपादित करें

मैंने System.getenv()विधि का उपयोग किया है।

अगर मैं दे रहा हूं तो यह मुद्रण मूल्य है

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

और यह nullमेरे द्वारा बनाए गए सिस्टम वैरिएबल के लिए समान प्रयास करने पर मान दिखा रहा है

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

5
आप अनुरोध प्रक्रिया (मेरे मामले में NetBeans) को पुनः आरंभ करने का प्रयास कर सकते हैं।
Kotodid

3
मैंने देखा है कि ग्रहण से पुनरारंभ विकल्प काम नहीं करता है। बस एप्लिकेशन को बंद करें, और इसे फिर से शुरू करें।
यासिन

1
इंटेलीज को फिर से शुरू करने से मेरी समस्या हल हो गई।
भूषण कर्मकार

मेरे लिए काम किए गए सिस्टम को फिर से शुरू करना, हो सकता है कि जेवीएम पहली बार शुरू में मानों का कैश रखता हो, जिसके कारण नए चर का पता नहीं लगाया जाता है।
सुमितकोनोजे

जवाबों:



52

स्पष्ट करने के लिए, सिस्टम चर पर्यावरण चर के समान हैं। उपयोगकर्ता पर्यावरण चर प्रति उपयोगकर्ता सेट होते हैं और जब भी कोई भिन्न उपयोगकर्ता लॉग इन करता है तो अलग-अलग होते हैं। सिस्टम वाइड वातावरण चर वही होते हैं जो उपयोगकर्ता लॉग ऑन करते हैं।

जावा में सिस्टम वाइड वैरिएबल या उपयोगकर्ता वैरिएबल के वर्तमान मान तक पहुँचने के लिए, नीचे देखें:

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

पर्यावरण चर पर अधिक जानकारी के लिए इस विकिपीडिया पृष्ठ को देखें ।

यह भी सुनिश्चित करें कि आप जिस पर्यावरण चर को पढ़ने की कोशिश कर रहे हैं वह जावा को इनवॉइस करने से पहले ठीक से सेट है:

echo %MYENVVAR%

आपको पर्यावरण चर का मान देखना चाहिए। यदि नहीं, तो आपको शेल (DOS) को फिर से खोलना होगा या लॉग ऑफ करना होगा और लॉग ऑन करना होगा।


नमस्ते .. मैंने System.getenv () पद्धति का उपयोग किया है .. यदि मैं "System.out.println (System.getenv (" JAVA_HOME ")) देता हूं, तो इसका मूल्य कम करना;" और अगर मैं मेरे द्वारा बनाया गया सिस्टम वेरिएबल देता हूं, तो इसका दिखावा शून्य होता है ("System.out.println (System.getenv (" DBE "));"
raja

3
getenvgetEnvसही के बजाय छोटे मामले में होना चाहिए ?
प्रतिक खडलोय

1
अगर मैं echo %var%इसे प्रिंट करता हूं %var%। अगर मैं इसके बजाय कोशिश echo $varकरता हूं तो यह काम करता है और उस एनवी चर का मान प्रदर्शित करता है। मेरा getenvलौट रहा है अशक्त।
डायलाक्स

3
@dialex का %var%उपयोग विंडोज़ के लिए, $varunix / linux / MacOS सिस्टम के लिए किया जाता है।
अल-मोतफर

27

सिस्टम / पर्यावरण गुण प्राप्त करते समय ब्याज के कुछ विवरण हैं।

पहले, System.getenv(String)रास्ते-वापस-जब-तब पेश किया गया, तब पदावनत किया गया। जेएसई 1.4 में सभी तरह से डिप्रेशन (मूर्खतापूर्ण, आईएचएमओ) जारी रहा ।

इसे JSE 5 में फिर से पेश किया गया ।

वे विंडोज में पर्यावरण चर पैनल का उपयोग कर सेट कर रहे हैं। जब तक आपका वर्तमान VM बंद नहीं होता है, और CMD.exe उदाहरण से बाहर निकलने तक चर में परिवर्तन नहीं हो सकता है।

पर्यावरण गुणों के विपरीत, जावा में जावा सिस्टम गुण भी हैं, जिसके माध्यम से सुलभ है System.getProperties()। जब वीएम को एक श्रृंखला कमांड लाइन तर्कों का उपयोग करके शुरू किया जाता है, तो इन चरों को आरंभ किया जा सकता है । उदाहरण के लिए, गुणों के लिए मान और-Dname=valuemaxInMemorypagingDirectory नीचे दिए गए आदेश में निर्धारित हैं:

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

इन संपत्तियों को सुरक्षा नीति के प्रतिबंधों को छोड़कर, रनटाइम पर संशोधित किया जा सकता है।


19

वास्तव में चर को सेट किया जा सकता है या नहीं, इसलिए, जावा 8 या बेहतर में इसके अशक्त मूल्य को एक Optionalऑब्जेक्ट में लपेटा जाना चाहिए , जो वास्तव में बहुत अधिक सुविधाओं की अनुमति देता है। निम्नलिखित उदाहरण में हम चर को प्राप्त करने की कोशिश करते हैं ENV_VAR1, अगर यह मौजूद नहीं है तो हम इसके बारे में सचेत करने के लिए कुछ कस्टम अपवाद फेंक सकते हैं:

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

5

Google getenv () की जाँच करने के लिए कहता है :

वर्तमान सिस्टम वातावरण का एक अपरिवर्तनीय स्ट्रिंग मैप दृश्य लौटाता है।

मुझे यकीन नहीं है कि सिस्टम चर पर्यावरण चर से कैसे भिन्न होते हैं, हालांकि, अगर आप स्पष्ट कर सकते हैं कि मैं और अधिक मदद कर सकता हूं।


मुझे लगता है कि "प्रति-उपयोगकर्ता" पर्यावरण चर के विपरीत रजा का अर्थ "सिस्टम-वाइड" है।
रोब

3

क्या आपने पर्यावरण चर सेट करने के बाद से रिबूट करने की कोशिश की है?

ऐसा प्रतीत होता है कि विंडोज कुछ प्रकार के कैश में पर्यावरण चर रहा है, और रिबूट करना इसे ताज़ा करने की एक विधि है। मुझे यकीन नहीं है, लेकिन एक अलग विधि हो सकती है, लेकिन अगर आप अपने परिवर्तनीय मूल्य को बदलने नहीं जा रहे हैं, तो यह बहुत अच्छा हो सकता है।


3

जैसा कि ऊपर किसी ने उल्लेख किया है, ग्रहण को फिर से शुरू करना मेरे लिए उपयोगकर्ता परिभाषित पर्यावरण चर के लिए काम करता है। मैं ग्रहण आईडीई को पुनः आरंभ करने के बाद, System.getenv()अपने पर्यावरण चर को उठा रहा हूं।


0

क्या आप एक लिनक्स सिस्टम पर हैं? यदि ऐसा है तो सुनिश्चित करें कि आप अपने चर का निर्यात कर रहे हैं।

myVar=testvalue; export myVar

जब तक मैं विश्व स्तर पर मूल्य को परिभाषित करने के लिए निर्यात का उपयोग नहीं करता तब तक मैं अशक्त हो जाता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.