2010-02-04 8 views
7

में cmd ​​कमांड के आउटपुट के साथ समस्या मैं cmd ​​कमांड (उदाहरण के लिए डीआईआर) के परिणामों में पढ़ने की कोशिश कर रहा हूं। प्रक्रिया बनाने के बाद, मैं InputStreamReader के संयोजन के साथ BufferedReader का उपयोग करता हूं। किसी कारण से, BufferedReader खाली आ रहा है, भले ही मुझे पता है कि कुछ आउटपुट पढ़ने के लिए होना चाहिए।जावा

String[] str = new String[] {"cmd.exe", "/c", 
      "cd", "c:\\", 
      "dir", "/b", "/s"    
    }; 
    Runtime rt = Runtime.getRuntime(); 
    try{ 

     Process p = rt.exec(str); 
     InputStream is =p.getInputStream(); 
     System.out.println(is.available()); 
     InputStreamReader in = new InputStreamReader(is); 

     StringBuffer sb = new StringBuffer(); 
     BufferedReader buff = new BufferedReader(in); 
     String line = buff.readLine(); 
     System.out.println(line); 
     while(line != null) 
     { 
      sb.append(line + "\n"); 
     System.out.println(line); 
      line = buff.readLine(); 
     } 
     System.out.println(sb); 
     if (sb.length() != 0){ 
      File f = new File("test.txt"); 
      FileOutputStream fos = new FileOutputStream(f); 
      fos.write(sb.toString().getBytes()); 

      fos.close(); 
     } 
    }catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
+0

प्रक्रिया है .getErrorStream() भी खाली लौट रहा है? –

+0

हाँ - त्रुटिस्ट्रीम और इनपुटस्ट्रीम दोनों में 0 बाइट – chama

+0

उपलब्ध हैं, मैंने अभी इसे फिर से चलाया है, और त्रुटि स्ट्रीम खाली नहीं है। जब मैं त्रुटि स्ट्रीम पढ़ता हूं, तो यह मुद्रित होता है "सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता है," जो वास्तव में समझ में नहीं आता है, लेकिन कम से कम यह कुछ है। – chama

उत्तर

5

आप मिल गया है चाहिए। आप एकाधिक कमांड को cmd.exe पर एक कमांड लाइन पर नहीं डाल सकते हैं। एक बैच फ़ाइल है।

सीडी या डीआईआर से सब कुछ छुटकारा पाने का प्रयास करें।

संपादित करें: वास्तव में:

C:\>cmd.exe /c cd c:\ dir 
The system cannot find the path specified. 
+0

समस्या हल हो गई! मैंने सीडी कमांड और डीआईआर कमांड के बीच "&" रखा और सही आउटपुट मिला! – chama

+2

@chama: बस 'डीआईआर/बी/एस सी: \ 'का उपयोग करने के बारे में क्या? बस इसके मजाक के लिए: अपने कोड को किसी अन्य ड्राइव से चलाने का प्रयास करें, जैसे 'डी:'। आपका 'सीडी' कमांड कुछ भी नहीं करेगा। आम तौर पर, जो कुछ भी लागू होता है उसका उपयोग करें और चीजों को खत्म करने की कोशिश न करें। यह एक उदाहरण है जहां आपको बिल्कुल एक कमांड की आवश्यकता होती है जो आप चाहते हैं जो करेंगे। दो का अनुक्रम नहीं होगा। – Joey

1

कोई त्रुटि हो सकता है:

यहाँ कोड मैं का उपयोग कर रहा है।

String[] str = new String[] {"cmd.exe", "/c", 
      "cd", "c:\\", 
      "dir", "/b", "/s"    
    }; 

जो मेरे लिए सही नहीं लगता है: इस मामले में आप भी जाल getErrorStream()

+0

मैंने एररस्ट्रीम को फँसाने की कोशिश की और "सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता।" लेकिन यह सी कैसे नहीं मिल सकता है: \? – chama

1

आदेश आप चल रहे हैं cmd.exe /c cd c:\ dir /b /s है। मुझे नहीं लगता कि आप जो कर रहे हैं वह कर रहे हैं।


मेरा मतलब है कि आप एक लाइन में दो आदेशों concatenated है और Windows खोल शायद ऐसा नहीं करता है। जैसे

String[] str = new String[] {"cmd.exe", "/c", 
      "cd", "c:\\", "&&", 
      "dir", "/b", "/s"    
    }; 

&& कुछ प्रयास करें खोल cd c:\ निष्पादित करने के लिए बता देंगे और उसके बाद dir /b /s निष्पादित करने के लिए करता है, तो पहले आदेश सफल रहा था।

+0

यह एक बहुत अच्छा बिंदु है। मैं मूल रूप से उस फ़ोल्डर में एक निश्चित फ़ाइल की खोज कर रहा था। दुर्भाग्यवश, बाहर निकालने से समस्या हल नहीं हुई – chama