簡體   English   中英

用Java獲取Cmd輸出

[英]Getting Cmd Output in Java

嘗試將cmd輸出重定向到Java var時遇到問題。

我的資料來源:

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

解決了問題,問題在於我無法訪問我想要的輸出,因為這是由調用另一個命令的命令引起的。

我用代碼解決的方式:

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基於

謝謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM