2013-01-22 8 views
5

Ho scritto un programma Java che carica i dati da un file e sto visualizzando l'avanzamento del carico sulla riga di comando, stampando un messaggio sullo schermo dopo ogni n record, che sembra così:visualizzazione java che modifica i progressi sulla riga di comando

$> elaborato 100 record.

$> elaborato 200 record.

$> elaborato 300 record.

$> elaborato 400 record.

$> elaborato 500 record.

...

Tuttavia, vorrei stampare una sola riga, e aggiornare solo il numero, vale a dire, in modo che l'uscita sempre e solo assomiglia a questo:

$> elaborato < n> record.

Come farlo in Java e, è possibile?

+0

Possibile duplicato di: http://stackoverflow.com/questions/1001335/java-gotoxyx-y-for-console-applications – Andremoniy

risposta

5

Dipende dalla tua console, ma il modo più semplice è quello di utilizzare il carattere backspace per spostare il cursore a ritroso, di fronte ai caratteri stampati di recente:

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); 
} 

Questo funziona sulla riga di comando di Windows, ma per esempio non funziona sulla console di Eclipse.

È necessario aggiungere una logica aggiuntiva per contare il numero di caratteri stampati e non codificare tutti questi caratteri "\ b", ma calcolare il numero corretto in base all'uscita recente.

Come suggerisce @Reza, utilizzando "\ r" è ancora più semplice:

int[] step = {100,200,300,400,500}; 
for (int i : step) { 
    System.out.print("$> processed < " + i + " > records.\r"); 
    Thread.sleep(500); 
} 

lo fa ancora non funziona sulla console Eclipse (ma è più leggibile rispetto all'approccio backspace), ma evita la gestione dei tutti i caratteri di backspace. Se si stampa una linea più corta rispetto a prima, potrebbe essere necessario stampare alcuni spazi aggiuntivi per cancellare i caratteri finali.

+1

Andreas - sto la stampa su Terminale sulla mia Ubuntu e funziona come un fascino. Grazie. – AHL

+0

BTW: Il link che @Reza ha pubblicato suggerisce di usare "\ r" per andare all'inizio della linea, il che potrebbe essere ancora più semplice - devi semplicemente ristampare l'intera linea. –

+0

codice di secondo funziona come un fascino – Mohsen

1

È necessario trovare un modo per tornare all'inizio di una riga e sovrascrivere ciò che è già stato emesso sulla console. La questione è stata affrontata qui:

How can I return to the start of a line in a console?

+0

Ho provato l'approccio a cui ti riferisci, e funziona anche. Posso contrassegnare due domande come corrette? Se spunta questa risposta, quella sopra non viene selezionata. – AHL

+0

@ AHL Per quanto ne so, solo una risposta potrebbe essere "accettata". Per favore vedi qui: [http://meta.stackexchange.com/questions/40200/can-i-accept-two-answers](http://meta.stackexchange.com/domande/40200/can-i-due-risposte accettare-) – RGO