我已經編寫了一個Java程序,用於從文件加載數據,並且通過在每n條記錄之後在屏幕上打印一條消息來顯示命令行上的加載進度,像這樣:java顯示在命令行上改變進度
$>處理了100條記錄。
$>處理了200條記錄。
$>處理了300條記錄。
$>處理了400條記錄。
$>處理了500條記錄。
...
不過,我想只是打印一條線,並且只更新數,即,使輸出始終看起來就像這樣:
$>處理< n>記錄。
如何在Java中做到這一點,它甚至有可能嗎?
我已經編寫了一個Java程序,用於從文件加載數據,並且通過在每n條記錄之後在屏幕上打印一條消息來顯示命令行上的加載進度,像這樣:java顯示在命令行上改變進度
$>處理了100條記錄。
$>處理了200條記錄。
$>處理了300條記錄。
$>處理了400條記錄。
$>處理了500條記錄。
...
不過,我想只是打印一條線,並且只更新數,即,使輸出始終看起來就像這樣:
$>處理< n>記錄。
如何在Java中做到這一點,它甚至有可能嗎?
這取決於您的控制檯上,但最簡單的方法是使用退格鍵向後移動光標,在剛打印字符的前面:
int[] step = {100,200,300,400,500};
System.out.print("$> processed < ");
for (int i : step) {
System.out.print(i + " > records.\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
Thread.sleep(500);
}
這工作在Windows命令行上,但例如它在Eclipse控制檯上不起作用。
您應該添加一些額外的邏輯來計算打印的字符數,而不是硬編碼所有這些「\ b」字符,但根據最近的輸出計算正確的數字。
由於@Reza建議,使用「\ R」是更容易:
int[] step = {100,200,300,400,500};
for (int i : step) {
System.out.print("$> processed < " + i + " > records.\r");
Thread.sleep(500);
}
它仍然不是Eclipse控制檯上工作(但是比退格的做法更具可讀性),但避免的處理所有退格字符。如果打印比以前更短的一行,可能需要打印一些額外的空白以清除尾隨字符。
您需要找到一種方法來返回到行首並覆蓋已在控制檯上輸出的內容。這個問題已經在此解決:
可能重複的:http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications – Andremoniy