2017-04-24 21 views
-1

cmd出力をJava varにリダイレクトしようとすると問題が発生します。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) 

私はそれが実際に見える方法だと思います。

グーグル/他のstackoverflow質問に記載されている情報に手が届かなかったので、本当に助けていただければ幸いです。

はありがとうと素敵な一日:)

EDITあります

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(); 

thisに基づいてAwnser。

ありがとうございました!