只是想知道是否可以通过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%
好的,当我通过输入流重定向时,它会在新行上打印百分比的每个变化。我想尊重原始格式。任何建议,怎么可能。
答案 0 :(得分:1)
我认为问题是您在使用println
编写原始输出时使用print
进行编写。 \r
使光标移动到当前行的开头,但是println使它向前移动。
我尝试使用print
代替println
。您可以检查该行是否以\r
字符开头,如果不是,则在此之后添加一行。