2009-03-30 10 views
9

के लिए जावा निष्पादन पथ में रिक्त स्थान ओएस एक्स पर, मैं कुछ निष्पादन करने की कोशिश कर रहा हूं, लेकिन जब पथ में कोई स्थान होता है, तो यह काम नहीं करता है। मैंने उद्धरण के साथ पथ के चारों ओर, अंतरिक्ष से बचने और यहां तक ​​कि \ u0020 का उपयोग करने की कोशिश की है।ओएस एक्स

उदाहरण के लिए, इस काम करता है:

Runtime.getRuntime().exec("open /foldername/toast.sh"); 

लेकिन वहाँ एक जगह है, इन में से कोई भी काम अगर:

Runtime.getRuntime().exec("open /folder name/toast.sh"); 

Runtime.getRuntime().exec("open \"/folder name/toast.sh\""); 

Runtime.getRuntime().exec("open /folder\\ name/toast.sh"); 

Runtime.getRuntime().exec("open /folder\u0020name/toast.sh"); 

विचार?

संपादित करें: बैकस्लैश से बच निकला ... अभी भी कोई काम नहीं है।

उत्तर

11

वहाँ Sun's forums पर इस समस्या का एक सारांश है ... एक बहुत आम मुद्दा ओएस एक्स

सूत्र में पिछले पोस्ट का सारांश दिया प्रस्तावित समाधान तक ही सीमित नहीं हो रहा है। संक्षेप में, कि एक String[] सरणी लेता Runtime.exec के फार्म का उपयोग करें:

String[] args = new String[] { "open", "\"/folder name/toast.sh\"" }; 

या (मंच पता चलता है यह भी काम करेगा)

String[] args = new String[] { "open", "folder name/toast.sh" }; 
+0

धन्यवाद! एफवाईआई के पास असली कार्यक्रम में कुछ अतिरिक्त झंडे थे और यदि आप इस तरह की सरणी का उपयोग करते हैं, तो आपको सबकुछ तोड़ना होगा। उदाहरण: स्ट्रिंग [] args = नया स्ट्रिंग [] {"खुला", "-n", "फ़ोल्डर का नाम/टोस्ट.श"}; – Alan

+0

अब मृत लिंक :(किसी को पता है कि मुझे एक प्रतिस्थापन लिंक कहां मिल सकता है? – Joe

1

इस प्रयास करें:

Runtime.getRuntime().exec("open /folder\\ name/toast.sh"); 

"\" सिर्फ स्ट्रिंग में एक अंतरिक्ष डाल दिया जाएगा, लेकिन "\" एक "\" स्ट्रिंग में है, जो खोल को दे दिया जाएगा डाल दिया जाएगा, और खोल अंतरिक्ष से बच जाएगा।

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

Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"}); 
+0

उफ़, कि मेरी ओर से एक टाइपो था, मैं कोशिश की है और यह काम नहीं करता। – Alan

0

पॉल विकल्प काम करता है, लेकिन आप अभी भी जैसे स्थानों पलायन करना होगा इसलिए:

Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"}); 

बात यह है कि एक स्ट्रिंग सरणी का उपयोग कर के बारे में बेकार है कि प्रत्येक परम और उसके विकल्प के लिए अपने स्वयं तत्व में होना चाहिए है। उदाहरण के लिए आप यह कर सकते हैं नहीं:

Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"}); 

लेकिन बजाय इतना है कि यह उल्लेख करना होगा:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});