【问题标题】:Print original format of Java Process Inputstream打印Java Process Inputstream的原始格式
【发布时间】:2014-07-29 09:37:51
【问题描述】:

只是想知道是否可以通过 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%

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

【问题讨论】:

  • 你能修改那个 printProgBar 代码吗?
  • @Pablo:是的,也可以这样做。但不改变功能。任何建议。

标签: java process inputstream


【解决方案1】:

我认为问题在于您使用println 编写,而原始输出使用print 编写。 \r 使光标移到当前行的开头,而 println 使光标向前移动一个。

我会尝试使用print 而不是println。您可以检查该行是否以 \r 字符开头,如果不是,则在其后添加新行。

【讨论】:

  • 是的,好点。但是检查 \r 没有用。但是检查 [ 或 ] 有效。仍然是一个肮脏的黑客。我需要让我的两个 jar 应用程序更通用。 :-)
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2012-08-29
  • 2022-12-02
相关资源
最近更新 更多