5

ファイルからデータをロードする Java プログラムを作成しました。次のように、n レコードごとに画面にメッセージを出力することで、コマンド ラインにロードの進行状況を表示しています。

$> 100 レコードを処理しました。

$> 200 レコードを処理しました。

$> 300 レコードを処理しました。

$> 400 レコードを処理しました。

$> 500 レコードを処理しました。

...

ただし、出力が常に次のようになるように、1行だけを印刷し、番号のみを更新したいと思います。

$> は < n > レコードを処理しました。

Javaでこれを行う方法と、それは可能ですか?

4

2 に答える 2

5

コンソールによって異なりますが、最も簡単な方法は、バックスペース文字を使用して、最近印刷された文字の前でカーソルを後方に移動することです。

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コンソールではまだ機能しませんが(ただし、バックスペースアプローチよりも読みやすくなります)、すべてのバックスペース文字の処理を回避します。以前より短い行を印刷する場合は、末尾の文字をクリアするためにいくつかの追加スペースを印刷する必要がある場合があります。

于 2013-01-22T12:38:09.437 に答える
1

行の先頭に戻り、コンソールに既に出力されているものを上書きする方法を見つける必要があります。この質問はここで対処されています:

コンソールで行頭に戻るにはどうすればよいですか?

于 2013-01-22T12:41:44.137 に答える