2012-02-19 12 views
5

मुझे कमांड लाइन उपकरण निष्पादित करने में कोई समस्या है। मैं WinRAR से UnRAR.exe निष्पादित करना चाहता हूं। मैं इसे इस तरह करता हूं:जावा निष्पादन कमांड लाइन प्रोग्राम

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile()); 

मेरी समस्या यह है कि संपीड़ित फ़ाइल पासवर्ड सुरक्षित है। अगर मैं अपने कंसोल में कमांड निष्पादित करता हूं तो मुझे पासवर्ड के लिए कहा जाता है। अगर मैंने जावा को निष्पादित करने दिया है तो प्रोग्राम बस समाप्त होता है और कभी भी उपयोगकर्ता इनपुट (पासवर्ड) की प्रतीक्षा नहीं करता है।

मैंने प्रक्रिया आउटस्ट्रीम को लिखने की कोशिश की लेकिन यह काम नहीं किया। क्या मुझे कुछ अलग-अलग वातावरण में निष्पादित कमांड लाइन प्रोग्राम के व्यवहार के बारे में जानने की ज़रूरत है?

संपादित करें: शायद मैं पर्याप्त स्पष्ट नहीं था। मेरा सवाल है: जावा के साथ कमांड लाइन प्रोग्राम के साथ बातचीत करना संभव है?

+0

मैं नया उत्तर जोड़ा गया है और पुराने को नष्ट कर दिया। मुझे उम्मीद है कि नया जवाब आपको संतुष्ट करेगा। – Kamil

उत्तर

10

मेरे लिए काम करता है। शायद आपने एक नई लाइन नहीं लिखी और धारा को फ्लश किया?

Process tr = Runtime.getRuntime().exec(new String[]{ "cat" }); 
Writer wr = new OutputStreamWriter(tr.getOutputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(tr.getInputStream())); 
wr.write("hello, world\n"); 
wr.flush(); 
String s = rd.readLine(); 
System.out.println(s); 

http://ideone.com/OUGYv

+1 आपके सवाल का, java.lang.Process मैं के लिए की तलाश थी!

0

प्रक्रिया चलाने और इसके साथ बातचीत करने के कुछ तरीके हैं।

जावा में Process कक्षा है। यह सबप्रोसेस की सभी 3 धाराएं प्राप्त करने की अनुमति देता है (आपके जावा ऐप द्वारा संसाधित प्रक्रिया)।

जावा मदद में प्रक्रिया वर्ग: link

यहाँ आप कोड के कुछ उदाहरण मिल सकते हैं, कि जावा में प्रक्रिया निष्पादित करता है: link

हालांकि उत्पादन और त्रुटि धाराओं से डेटा की प्रक्रिया समाप्त होने के बाद आप के लिए उपलब्ध हो जाएगा (आपका प्रोग्राम subecocess समाप्त होने तक .exec() विधि के साथ लाइन पर "बंद" किया जाएगा)।

चलने की प्रक्रिया के साथ बातचीत करने के लिए आपको एक और धागा का उपयोग करना होगा।

Using a thread to capture process output

Interacting with another process Java

संबंधित मुद्दे