2011-09-15 6 views
9

System.getenv(name) में सभी पर्यावरण चर का आकलन करने के लिए पर्यावरण चर के नाम की आवश्यकता है।जावा

मैं Runtime.exec(String[], String[], File), पर कॉल करने की कोशिश कर रहा हूं, द्वितीयक पैरामीटर को पर्यावरण चर की एक सरणी की आवश्यकता है, मुझे यकीन नहीं है कि अगर मैं इस पैरामीटर को निर्दिष्ट करता हूं तो उपप्रोसेस मौजूदा प्रक्रिया से पर्यावरण चर का उत्तराधिकारी होगा या नहीं।

उदाहरण के लिए, अगर मैं माध्यमिक पैरामीटर और वर्तमान जावा प्रक्रिया के रूप में new String[]{"NEWDIR=/home"} पारित पर्यावरण OLDDIR=/var है, उपप्रक्रिया में System.getenv("OLDDIR") की वापसी मान क्या है?

अद्यतन: क्षमा करें, मैं जावा 1.4 उपयोग करने के लिए है और ऐसा लगता है कि System.getenv() 1.5 में पेश किया गया था?

+0

आपको जावा 1.4 का उपयोग क्यों करना चाहिए? जावा के नए संस्करणों में शानदार पिछड़ा संगतता है - क्या आपने अपग्रेड करने का प्रयास किया है? – Bringer128

उत्तर

11

System.getenv() वातावरण चर के सभी के साथ एक Map<String,String> वापस आ जाएगी।

लेकिन आप आसानी से ProcessBuilder पर स्विच कर सकते हैं जो नई प्रक्रियाओं को शुरू करने के लिए एक अधिक सुविधाजनक एपीआई है।

ProcessBuilder के साथ आप बस environment() कॉल कर सकते हैं और प्राप्त एक Map कि शामिल मौजूदा वातावरण चर और जो आप में हेरफेर कर सकते हैं आप कैसे हैं: यानी, आप इसे करने के लिए कुछ जोड़ते हैं, तो यह है कि नए में जोड़ दिया जाएगा पर्यावरण चर प्रक्रियाओं। यदि आप इससे कुछ हटाते हैं, तो यह नई प्रक्रिया में उपस्थित होगा।

+0

आपके त्वरित उत्तर के लिए धन्यवाद, मुझे जावा 14 में कैसे करना चाहिए? – sevenever

+0

तब आप बहुत अधिक खराब हो गए हैं, क्योंकि 'System.getenv() 'और' ProcessBuilder' दोनों जहां केवल जावा 5 में प्रस्तुत किया गया था और' Runtime.exec() 'अज्ञात मौजूदा पर्यावरण चर को नए तरीके से विलय करने की अनुमति नहीं देता है निर्दिष्ट वाले गंभीरता से: उस प्राचीन संस्करण से छुटकारा पाएं। –

17
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
1

यदि आप बाहरी खोल चलाते हैं, तो आप पर्यावरण चर सेट करने के लिए इसका उपयोग कर सकते हैं। जैसे

bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2 

यह केवल काम करता है अगर आप एक यूनिक्स खोल (या cygwin)

आप जावा 1.4 और जावा 5.0 से दूर माइग्रेट कर लेना चाहिए की है। यहां तक ​​कि जावा 6 आप जावा 7 को अपग्रेड करने पर विचार कर सकते हैं।