Tengo un programa Java que se ejecuta en modo de línea de comandos. Me gustaría mostrar una barra de progreso que muestre el porcentaje de trabajo realizado. El mismo tipo de barra de progreso que verías usando wget en Unix. es posible?
java
command-line
progress-bar
g andrieu
fuente
fuente
Respuestas:
He implementado este tipo de cosas antes. No se trata tanto de Java, sino de qué personajes enviar a la consola.
La clave es la diferencia entre
\n
y\r
.\n
va al inicio de una nueva línea. Pero\r
es solo retorno de carro : vuelve al inicio de la misma línea.Entonces, lo que hay que hacer es imprimir su barra de progreso, por ejemplo, imprimiendo la cadena
En el siguiente tic de la barra de progreso, sobrescriba la misma línea con una barra más larga. (porque estamos usando \ r, nos mantenemos en la misma línea) Por ejemplo:
Lo que debe recordar hacer es cuando termine, si simplemente imprime
Es posible que aún tenga algo de basura de la barra de progreso en la línea. Entonces, una vez que haya terminado con la barra de progreso, asegúrese de imprimir suficiente espacio en blanco para eliminarlo de la línea. Como:
Espero que ayude.
fuente
Hay https://github.com/ctongfei/progressbar , Licencia: MIT
Barra de progreso de consola simple. La escritura de la barra de progreso ahora se ejecuta en otro hilo.
Menlo, Fira Mono, Source Code Pro o SF Mono se recomiendan para obtener efectos visuales óptimos.
Para las fuentes Consolas o Andale Mono, use
ProgressBarStyle.ASCII
(vea a continuación) porque los glifos de dibujo de recuadro no están alineados correctamente en estas fuentes.Maven
Uso:
fuente
step()
llamadas)? ¿Su biblioteca se ejecuta de forma asíncrona, permitiendo que el reloj se actualice? ¿Qué pasa si mi biblioteca funciona durante días? ¿Utiliza la/r
estrategia? ¿Eso dará como resultado una salida de varios cientos de megabytes?Encontré el siguiente código para funcionar correctamente. Escribe bytes en el búfer de salida. Quizás los métodos que usan un escritor como el
System.out.println()
método reemplazan las ocurrencias de\r
a\n
para que coincidan con el final de la línea nativa del objetivo (si no está configurado correctamente).fuente
He hecho un progreso porcentual desnudo para verificar el archivo de descarga restante.
Llamo al método periódicamente en la descarga de mi archivo para verificar el tamaño total del archivo y el resto y presentarlo en
%
.También se puede usar para otros fines de tareas.
Ejemplo de prueba y salida
Prueba con bucle
El método se puede modificar fácilmente:
fuente
Ejemplo de C # pero supongo que esto es lo mismo para
System.out.print
Java. Siéntase libre de corregirme si me equivoco.Básicamente, desea escribir el
\r
carácter de escape al comienzo de su mensaje, lo que hará que el cursor regrese al inicio de la línea (avance de línea) sin pasar a la siguiente línea.fuente
Un poco refactorizado y actualizado el método de @ maytham-ɯɐɥʇʎɐɯ. Ahora es compatible con un tamaño arbitrario de la barra de progreso:
fuente
Aquí hay una versión modificada de lo anterior:
... y en general:
fuente
Esto sería posible con una biblioteca Java Curses. Esto es lo que he encontrado. No lo he usado yo mismo y no sé si es multiplataforma.
fuente
Utilizo una barra de progreso de "rebote" cuando necesito retrasar una herramienta para evitar una condición de carrera.
fuente
Recientemente me he enfrentado al mismo problema, puedes verificar mi código: lo configuré para un # en 5%, que puedes modificar más adelante.
fuente
fuente
Edité el código de Eoin Campbell en Java y agregué progreso formateado en porcentajes.
Y salida:
fuente
fuente
fuente
ingrese la descripción de la imagen aquí
fuente