2017-04-24 83 views
-1

嘗試將cmd輸出重定向到Java變體時出現問題。使用Java獲取Cmd輸出

我的資料來源:

System.out.println("Init WAR packaging"); 
ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "start", "/wait", "new.bat"})); 
Process process = builder.start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
StringBuilder strBuilder = new StringBuilder(); 
String line = null; 
while (process.isAlive()) { 
    if((line = reader.readLine()) != null) { 
     strBuilder.append(line); 
     strBuilder.append(System.getProperty("line.separator")); 
    } else { 
     System.out.println("123"); 
     Thread.sleep(10); 
    } 
} 
String result = strBuilder.toString(); 
System.out.println(result); 
System.out.println("Start WAR packaging"); 

批主要包括:

jar -cvf test.war *.jsp *.xml 

輸出我在控制檯中看到:

Init WAR packaging 
123 

Start WAR packaging 

所以我得到從我的CMD輸出爲實際CMD輸出的外觀如下:

asdf.jsp wird hinzugefügt(ein = 17270) (aus = 4693)(72 % verkleinert) 
qwer.jsp wird hinzugefügt(ein = 12969) (aus = 3519)(72 % verkleinert) 
yxcv.jsp wird hinzugefügt(ein = 22463) (aus = 5375)(76 % verkleinert) 
rewq.jsp wird hinzugefügt(ein = 30687) (aus = 6748)(78 % verkleinert) 
jhgf.jsp wird hinzugefügt(ein = 47974) (aus = 11005)(77 % verkleinert) 

我認爲這實際上是它的樣子。

真的很感謝任何形式的幫助,因爲我無法與Google /其他stackoverflow上的問題相處的問題相處。

謝謝你,有一個愉快的一天:)

編輯:

我修改了代碼全由arataj的建議(希望我把你的右):

ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "start", "/wait", "new.bat"})); 
     Process process = builder.start(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     StringBuilder strBuilder = new StringBuilder(); 
     String line = null; 
     while (process.isAlive()) { 
      Thread.sleep(10); 
      line = reader.readLine(); 
      strBuilder.append(line); 
      strBuilder.append(System.getProperty("line.separator")); 
     } 
     line = reader.readLine(); 
     strBuilder.append(line); 
     String result = strBuilder.toString(); 
     System.out.println(result); 

控制檯輸出:

Init WAR packaging 
null 
null 
Start WAR packaging 
+0

不能得到爲什麼有人低估這個 –

回答

2

解決了這個問題,問題是我沒有訪問輸出iw因爲這是由一個指揮另一個指揮官的命令造成的。

我的方式解決它在代碼:

ProcessBuilder builder = new ProcessBuilder("cmd.exe"); 
Process process = builder.start(); 
BufferedWriter out = new BufferedWriter(new 
OutputStreamWriter(process.getOutputStream())); 
InputStream stdout = process.getInputStream(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 

out.write("start /b new.bat\n"); 
out.flush(); 
out.close(); 

Scanner scanner = new Scanner(stdout); 
while (scanner.hasNextLine()) { 
    System.out.println(scanner.nextLine()); 
} 
System.out.println("end"); 
scanner.close(); 

Awnser基於this

感謝您的幫助!