Eu tenho um programa Java em execução no modo de linha de comando. Gostaria de exibir uma barra de progresso, mostrando a porcentagem de trabalho realizado. O mesmo tipo de barra de progresso que você veria usando o wget no unix. Isso é possível?
java
command-line
progress-bar
g andrieu
fonte
fonte
Respostas:
Eu já implementei esse tipo de coisa antes. Não é muito sobre java, mas quais caracteres enviar para o console.
A chave é a diferença entre
\n
e\r
.\n
vai para o início de uma nova linha. Mas\r
é apenas o retorno de carro - ele volta ao início da mesma linha.Portanto, o que você deve fazer é imprimir sua barra de progresso, por exemplo, imprimindo a string
No próximo tique da barra de progresso, substitua a mesma linha por uma barra mais longa. (porque estamos usando \ r, permanecemos na mesma linha) Por exemplo:
O que você precisa se lembrar de fazer é quando terminar, se você apenas imprimir
Você ainda pode ter algum lixo da barra de progresso na linha. Portanto, depois de concluir a barra de progresso, imprima espaço em branco suficiente para removê-la da linha. Tal como:
Espero que ajude.
fonte
Existe https://github.com/ctongfei/progressbar , Licença: MIT
Barra de progresso simples do console. A gravação da barra de progresso agora é executada em outro segmento.
Menlo, Fira Mono, Source Code Pro ou SF Mono são recomendados para efeitos visuais ideais.
Para fontes Consolas ou Andale Mono, use
ProgressBarStyle.ASCII
(veja abaixo) porque os glifos de desenho de caixa não estão alinhados corretamente nessas fontes.Maven:
Uso:
fonte
step()
chamadas)? Sua biblioteca é executada de forma assíncrona, permitindo que o relógio seja atualizado? E se minha biblioteca funcionar por dias? Ele usa a/r
estratégia? Isso resultará em uma saída de centenas de megabytes?Encontrei o seguinte código para funcionar corretamente. Ele grava bytes no buffer de saída. Talvez os métodos que usam um gravador como o
System.out.println()
método substituam as ocorrências de\r
to\n
para coincidir com o final da linha nativa do destino (se não estiver configurado corretamente).fonte
Fiz um progresso percentual para verificar o restante do arquivo baixado.
Chamo o método periodicamente no download do meu arquivo para verificar o tamanho total do arquivo e o restante e apresentá-lo em
%
.Também pode ser usado para outros fins de tarefa.
Exemplo de teste e saída
Teste com loop for
O método pode ser facilmente modificado:
fonte
Exemplo de c #, mas estou assumindo que isso é o mesmo para
System.out.print
em Java. Sinta-se livre para me corrigir se eu estiver errado.Basicamente, você deseja escrever o
\r
caractere de escape no início da sua mensagem, o que fará com que o cursor retorne ao início da linha (avanço de linha) sem passar para a próxima linha.fonte
Um pouco refatorado e atualizado o método de @ maytham-ɯɐɥʇʎɐɯ. Agora está suportando um tamanho arbitrário da barra de progresso:
fonte
Aqui está uma versão modificada do acima:
... e principalmente:
fonte
Isso seria possível com uma biblioteca Java Curses. Isto é o que eu encontrei. Eu não o usei e não sei se é multiplataforma.
fonte
Eu uso uma barra de progresso "quicando" quando preciso atrasar uma ferramenta para evitar uma condição de corrida.
fonte
Recentemente, enfrentei o mesmo problema, você pode verificar meu código: configurei-o para um # em 5%, que você pode modificar posteriormente.
fonte
fonte
Editei o código de Eoin Campbell para java e adicionei o progresso formatado em porcentagens.
E saída:
fonte
fonte
fonte
insira a descrição da imagem aqui
fonte