Se o console suportar (por exemplo, console Java do Eclipse) personalizar cores de stdout / stderr, será possível usar System.out.println para uma cor e System.err.println para outra cor.
jw_
Respostas:
585
Se o seu terminal suportar, você pode usar códigos de escape ANSI para usar cores em sua saída. Geralmente funciona para prompts de shell do Unix; no entanto, ele não funciona no prompt de comando do Windows (apesar de funcionar no Cygwin). Por exemplo, você pode definir constantes como estas para as cores:
Em seguida, você pode fazer referência a eles conforme necessário.
Por exemplo, usando as constantes acima, você pode fazer a seguinte saída de texto em vermelho nos terminais suportados:
System.out.println(ANSI_RED +"This text is red!"+ ANSI_RESET);
Atualização: você pode querer verificar a biblioteca Jansi . Ele fornece uma API e tem suporte para Windows usando JNI. Ainda não tentei; no entanto, parece promissor.
Atualização 2: Além disso, se você deseja alterar a cor do plano de fundo do texto para uma cor diferente, tente também o seguinte:
System.out.println(ANSI_GREEN_BACKGROUND +"This text has a green background but default text!"+ ANSI_RESET);System.out.println(ANSI_RED +"This text has red text but a default background!"+ ANSI_RESET);System.out.println(ANSI_GREEN_BACKGROUND + ANSI_RED +"This text has a green background and red text!"+ ANSI_RESET);
@ WhiteFang34 Você pode, por favor, explicar qual é a utilidade do RESET se sua cor é PRETA, pelo menos no meu console? É como um padrão ou sth.?
Boro
8
@Boro: o código de redefinição desativa todos os atributos ANSI definidos até o momento, o que deve retornar o console aos seus padrões. É útil se você não sabe a cor padrão ou também estão usando alguns dos outros atributos como cor de fundo, estilos de fonte, etc.
WhiteFang34
2
jansi é realmente ótimo! para quem desenvolve eclipse, recomendo este plugin: mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console e um bom código para ativar a cor se o código não estiver sendo executado no console:if (System.console() == null) System.setProperty("jansi.passthrough", "true");
Danny Lo
1
@PankajNimgade, leia a resposta novamente e você talvez perceber isso:however it doesn't work for Windows command prompt
Felix Edelmann
1
@ DannyLo Muito obrigado pelo link para o plugin Eclipse!
Noah Broyles
72
Aqui está uma lista de cores em uma classe Java com public staticcampos
Criei uma biblioteca chamada JCDP ( Java Colored Debug Printer ).
Para Linux, macOS e Windows 10, ele usa os códigos de escape ANSI mencionados pelo WhiteFang, mas os abstrai usando palavras em vez de códigos, o que é muito mais intuitivo. Torna-se tão fácil quanto:
enumColor{//Color end string, color reset
RESET("\033[0m"),// Regular Colors. Normal color, no bold, background color etc.
BLACK("\033[0;30m"),// BLACK
RED("\033[0;31m"),// RED
GREEN("\033[0;32m"),// GREEN
YELLOW("\033[0;33m"),// YELLOW
BLUE("\033[0;34m"),// BLUE
MAGENTA("\033[0;35m"),// MAGENTA
CYAN("\033[0;36m"),// CYAN
WHITE("\033[0;37m"),// WHITE// Bold
BLACK_BOLD("\033[1;30m"),// BLACK
RED_BOLD("\033[1;31m"),// RED
GREEN_BOLD("\033[1;32m"),// GREEN
YELLOW_BOLD("\033[1;33m"),// YELLOW
BLUE_BOLD("\033[1;34m"),// BLUE
MAGENTA_BOLD("\033[1;35m"),// MAGENTA
CYAN_BOLD("\033[1;36m"),// CYAN
WHITE_BOLD("\033[1;37m"),// WHITE// Underline
BLACK_UNDERLINED("\033[4;30m"),// BLACK
RED_UNDERLINED("\033[4;31m"),// RED
GREEN_UNDERLINED("\033[4;32m"),// GREEN
YELLOW_UNDERLINED("\033[4;33m"),// YELLOW
BLUE_UNDERLINED("\033[4;34m"),// BLUE
MAGENTA_UNDERLINED("\033[4;35m"),// MAGENTA
CYAN_UNDERLINED("\033[4;36m"),// CYAN
WHITE_UNDERLINED("\033[4;37m"),// WHITE// Background
BLACK_BACKGROUND("\033[40m"),// BLACK
RED_BACKGROUND("\033[41m"),// RED
GREEN_BACKGROUND("\033[42m"),// GREEN
YELLOW_BACKGROUND("\033[43m"),// YELLOW
BLUE_BACKGROUND("\033[44m"),// BLUE
MAGENTA_BACKGROUND("\033[45m"),// MAGENTA
CYAN_BACKGROUND("\033[46m"),// CYAN
WHITE_BACKGROUND("\033[47m"),// WHITE// High Intensity
BLACK_BRIGHT("\033[0;90m"),// BLACK
RED_BRIGHT("\033[0;91m"),// RED
GREEN_BRIGHT("\033[0;92m"),// GREEN
YELLOW_BRIGHT("\033[0;93m"),// YELLOW
BLUE_BRIGHT("\033[0;94m"),// BLUE
MAGENTA_BRIGHT("\033[0;95m"),// MAGENTA
CYAN_BRIGHT("\033[0;96m"),// CYAN
WHITE_BRIGHT("\033[0;97m"),// WHITE// Bold High Intensity
BLACK_BOLD_BRIGHT("\033[1;90m"),// BLACK
RED_BOLD_BRIGHT("\033[1;91m"),// RED
GREEN_BOLD_BRIGHT("\033[1;92m"),// GREEN
YELLOW_BOLD_BRIGHT("\033[1;93m"),// YELLOW
BLUE_BOLD_BRIGHT("\033[1;94m"),// BLUE
MAGENTA_BOLD_BRIGHT("\033[1;95m"),// MAGENTA
CYAN_BOLD_BRIGHT("\033[1;96m"),// CYAN
WHITE_BOLD_BRIGHT("\033[1;97m"),// WHITE// High Intensity backgrounds
BLACK_BACKGROUND_BRIGHT("\033[0;100m"),// BLACK
RED_BACKGROUND_BRIGHT("\033[0;101m"),// RED
GREEN_BACKGROUND_BRIGHT("\033[0;102m"),// GREEN
YELLOW_BACKGROUND_BRIGHT("\033[0;103m"),// YELLOW
BLUE_BACKGROUND_BRIGHT("\033[0;104m"),// BLUE
MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"),// MAGENTA
CYAN_BACKGROUND_BRIGHT("\033[0;106m"),// CYAN
WHITE_BACKGROUND_BRIGHT("\033[0;107m");// WHITEprivatefinalString code;Color(String code){this.code = code;}@OverridepublicString toString(){return code;}}
Java não "manipula os códigos", isso é verdade, mas o Java gera o que você pediu. não é culpa do Java que o console do Windows trate o ESC (chr (27)) como apenas outro glifo (←).
o que não funciona porque a camada Java IO não os converte em cores. System.out.println ((char) 27 + "[31; 1mERROR" + (char) 27 + "[0m" produz apenas "[31; 1mERROR [0m" quando executado em um windows cmd.com como um arquivo executável .jar
simpleuser
a pergunta não foi marcada windows. o console do Windows nunca foi compatível com ANSI que eu lembro.
jcomeau_ictx
mas a questão é que java não está a lidar com os códigos, independentemente do cmd.com apoio
simpleuser
3
veja resposta editada. Java está fazendo exatamente como é dito. o problema é o console não compatível com ANSI.
jcomeau_ictx
1
Estou com o mesmo problema
sgrillon 15/0318
7
Você pode fazer isso usando seqüências de escape ANSI. Na verdade, eu montei essa classe em Java para qualquer pessoa que desejasse uma solução simples para isso. Ele permite mais do que apenas códigos de cores.
Log.i(TAG,"This is an info message");Log.e(TAG,"This is an error message");Log.w(TAG,"This is a warning message");Log.d(TAG,"This is a debug message");
A melhor maneira de colorir o texto do console é usar códigos de escape ANSI . Além da cor do texto, os códigos de escape ANSI permitem cores de fundo, decorações e muito mais.
A biblioteca Jansi é um pouco mais avançada (pode usar todas as funções dos códigos de escape ANSI), fornece uma API e suporta o Windows usando JNA.
Caso contrário, você pode definir manualmente sua própria cor, conforme mostrado em outras respostas.
Windows 10
O Windows 10 (desde a compilação 10.0.10586 - novembro de 2015) suporta códigos de escape ANSI ( documentação do MSDN ), mas não está ativado por padrão. Para habilitá-lo:
Com a API SetConsoleMode , use o ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)sinalizador. Jansi usa essa opção.
Se a API SetConsoleMode não for usada, é possível alterar a chave de registro global HKEY_CURRENT_USER\Console\VirtualTerminalLevelcriando uma dword e defina-a como 0 ou 1 para o processamento ANSI:
"VirtualTerminalLevel"=dword:00000001
Antes do Windows 10
O console do Windows não suporta cores ANSI. Mas é possível usar o console que faz.
O "voto negativo" não é meu - mas, existem outras respostas que fornecem a pergunta do OP e foram publicadas há algum tempo. Ao postar uma resposta, consulte: Como redigir uma boa resposta? , adicione uma nova solução ou uma explicação substancialmente melhor, especialmente ao responder a perguntas mais antigas.
help-info.de
7
@iSahil isso provavelmente foi diminuído porque simplesmente escrever em erro padrão não explicitamente cora nada. Muitos IDEs e consoles interpretam as mensagens de erro e as imprimem em vermelho ou similar, mas não é algo em que você pode confiar.
David
1
Embora essa não tenha sido a resposta direta à pergunta acima, essa era a resposta que eu procurava ao pesquisar "java print in red console". Assim, sinto que tem o seu lugar nesta página.
Maude
-2
Se você usar o Kotlin (que funciona perfeitamente com Java), poderá criar uma enumeração:
enumclassAnsiColor(private val colorNumber:Byte){
BLACK(0), RED(1), GREEN(2), YELLOW(3), BLUE(4), MAGENTA(5), CYAN(6), WHITE(7);
companion object {privateconst val prefix ="\u001B"const val RESET ="$prefix[0m"private val isCompatible ="win"!in System.getProperty("os.name").toLowerCase()}
val regular get()=if(isCompatible)"$prefix[0;3${colorNumber}m"else""
val bold get()=if(isCompatible)"$prefix[1;3${colorNumber}m"else""
val underline get()=if(isCompatible)"$prefix[4;3${colorNumber}m"else""
val background get()=if(isCompatible)"$prefix[4${colorNumber}m"else""
val highIntensity get()=if(isCompatible)"$prefix[0;9${colorNumber}m"else""
val boldHighIntensity get()=if(isCompatible)"$prefix[1;9${colorNumber}m"else""
val backgroundHighIntensity get()=if(isCompatible)"$prefix[0;10${colorNumber}m"else""}
E então o uso é o seguinte: (o código abaixo mostra os diferentes estilos para todas as cores)
val sampleText ="This is a sample text"
enumValues<AnsiColor>().forEach { ansiColor ->
println("${ansiColor.regular}$sampleText${AnsiColor.RESET}")
println("${ansiColor.bold}$sampleText${AnsiColor.RESET}")
println("${ansiColor.underline}$sampleText${AnsiColor.RESET}")
println("${ansiColor.background}$sampleText${AnsiColor.RESET}")
println("${ansiColor.highIntensity}$sampleText${AnsiColor.RESET}")
println("${ansiColor.boldHighIntensity}$sampleText${AnsiColor.RESET}")
println("${ansiColor.backgroundHighIntensity}$sampleText${AnsiColor.RESET}")}
Se estiver executando no Windows em que esses códigos ANSI não são suportados, a isCompatibleverificação evita problemas substituindo os códigos por uma sequência vazia.
Respostas:
Se o seu terminal suportar, você pode usar códigos de escape ANSI para usar cores em sua saída. Geralmente funciona para prompts de shell do Unix; no entanto, ele não funciona no prompt de comando do Windows (apesar de funcionar no Cygwin). Por exemplo, você pode definir constantes como estas para as cores:
Em seguida, você pode fazer referência a eles conforme necessário.
Por exemplo, usando as constantes acima, você pode fazer a seguinte saída de texto em vermelho nos terminais suportados:
Atualização: você pode querer verificar a biblioteca Jansi . Ele fornece uma API e tem suporte para Windows usando JNI. Ainda não tentei; no entanto, parece promissor.
Atualização 2: Além disso, se você deseja alterar a cor do plano de fundo do texto para uma cor diferente, tente também o seguinte:
Por exemplo:
fonte
if (System.console() == null) System.setProperty("jansi.passthrough", "true");
however it doesn't work for Windows command prompt
Aqui está uma lista de cores em uma classe Java com
public static
camposUso
Nota Não se esqueça de usar a
RESET
pós-impressão, pois o efeito permanecerá se não for limpo.fonte
Criei uma biblioteca chamada JCDP ( Java Colored Debug Printer ).
Para Linux, macOS e Windows 10, ele usa os códigos de escape ANSI mencionados pelo WhiteFang, mas os abstrai usando palavras em vez de códigos, o que é muito mais intuitivo. Torna-se tão fácil quanto:
Você tem alguns exemplos no repositório github do JCDP .
fonte
Tente o seguinte enum:
E agora vamos fazer um pequeno exemplo:
fonte
Uma maneira bastante portátil de fazer isso é com as seqüências de escape brutas. Veja http://en.wikipedia.org/wiki/ANSI_escape_code
[editado para user9999999 em 20-02-2017]
Java não "manipula os códigos", isso é verdade, mas o Java gera o que você pediu. não é culpa do Java que o console do Windows trate o ESC (chr (27)) como apenas outro glifo (←).
fonte
windows
. o console do Windows nunca foi compatível com ANSI que eu lembro.Você pode fazer isso usando seqüências de escape ANSI. Na verdade, eu montei essa classe em Java para qualquer pessoa que desejasse uma solução simples para isso. Ele permite mais do que apenas códigos de cores.
https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a
(Portado de: https://github.com/nathan-fiscaletti/ansi-util )
Exemplo de uso:
fonte
Se alguém estiver procurando uma solução rápida, fique à vontade para usar a seguinte classe auxiliar :)
USO:
Obrigado @ whiteFang34 pelos códigos ANSI.
fonte
A melhor maneira de colorir o texto do console é usar códigos de escape ANSI . Além da cor do texto, os códigos de escape ANSI permitem cores de fundo, decorações e muito mais.
Unix
Se você usa o springboot, há uma enumeração específica para a coloração do texto: org.springframework.boot.ansi.AnsiColor
A biblioteca Jansi é um pouco mais avançada (pode usar todas as funções dos códigos de escape ANSI), fornece uma API e suporta o Windows usando JNA.
Caso contrário, você pode definir manualmente sua própria cor, conforme mostrado em outras respostas.
Windows 10
O Windows 10 (desde a compilação 10.0.10586 - novembro de 2015) suporta códigos de escape ANSI ( documentação do MSDN ), mas não está ativado por padrão. Para habilitá-lo:
ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
sinalizador. Jansi usa essa opção.HKEY_CURRENT_USER\Console\VirtualTerminalLevel
criando uma dword e defina-a como 0 ou 1 para o processamento ANSI:"VirtualTerminalLevel"=dword:00000001
Antes do Windows 10
O console do Windows não suporta cores ANSI. Mas é possível usar o console que faz.
fonte
Usando a função de cor para imprimir texto com cores
Código:
Uso:
fonte
Para strikeout:
fonte
A melhor solução para imprimir qualquer texto em vermelho em Java é:
fonte
Se você usar o Kotlin (que funciona perfeitamente com Java), poderá criar uma enumeração:
E então o uso é o seguinte: (o código abaixo mostra os diferentes estilos para todas as cores)
Se estiver executando no Windows em que esses códigos ANSI não são suportados, a
isCompatible
verificação evita problemas substituindo os códigos por uma sequência vazia.fonte