打印Java Process Inputstream的原始格式

时间:2014-07-29 09:37:52

标签: java process inputstream

只是想知道是否可以通过java进程输入流保持从外部Jar重定向控制台消息的原始格式。

我正在调用外部Jar工具并在控制台上打印出它的消息。 这是我用它的代码:

proc = rt.exec(java -jar External jar with arguments);
String line;
BufferedReader inMsg = new BufferedReader(
        new InputStreamReader(proc.getInputStream()));
while ((line = inMsg.readLine()) != null) {
    System.out.println(line);
}
in.close();

但是,这个外部Jar程序实现了一个进度条来显示文件下载过程,它基本上更新了相同的行:

private static void printProgBar(double bytesCopied) {
    double percentDone = ((bytesCopied)/(curretnFileSize));
    percentDone *= 100;
    StringBuilder bar = new StringBuilder("[");

    for (int i = 0; i < 50; i++) {
        if (i < (percentDone / 2)) {
            bar.append("=");
        } else if (i == (percentDone / 2)) {
            bar.append(">");
        } else {
            bar.append(" ");
        }
    }

    bar.append("]   ").append(df.format(percentDone)).append("%     ");
    if(percentDone > 1){
        System.out.print("\r" + bar.toString());
    }
}

输出是这样的:

[=======                                           ]   12.51%

好的,当我通过输入流重定向时,它会在新行上打印百分比的每个变化。我想尊重原始格式。任何建议,怎么可能。

1 个答案:

答案 0 :(得分:1)

我认为问题是您在使用println编写原始输出时使用print进行编写。 \r使光标移动到当前行的开头,但是println使它向前移动。

我尝试使用print代替println。您可以检查该行是否以\r字符开头,如果不是,则在此之后添加一行。