Если консоль поддерживает (например, консоль Java Eclipse) настройку цвета для stdout / stderr, то вы можете использовать System.out.println для одного цвета и System.err.println для другого цвета.
jw_
Ответы:
585
Если ваш терминал поддерживает это, вы можете использовать управляющие коды ANSI для использования цвета в выходных данных. Обычно это работает для приглашений оболочки Unix; однако, это не работает для командной строки Windows (хотя, это работает для Cygwin). Например, вы можете определить такие константы для цветов:
Затем вы можете ссылаться на них по мере необходимости.
Например, используя вышеуказанные константы, вы можете сделать следующий вывод красного текста на поддерживаемых терминалах:
System.out.println(ANSI_RED +"This text is red!"+ ANSI_RESET);
Обновление: вы можете проверить библиотеку Янси . Он предоставляет API и поддерживает Windows с использованием JNI. Я еще не пробовал это; Однако это выглядит многообещающе.
Обновление 2: Кроме того, если вы хотите изменить цвет фона текста на другой цвет, вы можете попробовать следующее:
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 Не могли бы вы объяснить, для чего нужен RESET, если его цвет - ЧЕРНЫЙ, по крайней мере, в моей консоли? Это как по умолчанию или что-то еще?
Боро
8
@Boro: код сброса отключает все установленные ранее атрибуты ANSI, что должно вернуть консоли по умолчанию. Это полезно, если вы не знаете цвет по умолчанию или также используете другие атрибуты, такие как цвет фона, стили шрифта и т. Д.
WhiteFang34,
2
Янси действительно здорово! для тех, кто разрабатывает в Eclipse, я могу порекомендовать этот плагин: mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console и хороший кусок кода, чтобы включить цвет, если код не выполняется в консоли:if (System.console() == null) System.setProperty("jansi.passthrough", "true");
Дэнни Ло
1
@PankajNimgade, прочитайте ответ снова, и вы, возможно, заметите это:however it doesn't work for Windows command prompt
Феликс Эдельманн
1
@DannyLo Большое спасибо за ссылку на плагин Eclipse!
Ноа Бройлс
72
Вот список цветов в классе Java с public staticполями
Я создал библиотеку под названием JCDP ( цветной принтер отладки Java ).
Для Linux, macOS и Windows 10 он использует управляющие коды ANSI, упомянутые WhiteFang, но абстрагирует их, используя слова вместо кодов, что гораздо более интуитивно понятно . Это становится так же просто, как:
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 не «обрабатывает коды», это правда, но Java выводит то, что вы сказали, для вывода. Я не виноват в том, что консоль Windows рассматривает ESC (chr (27)) как еще один глиф (←).
который не работает, потому что слой Java IO не конвертирует их в цвета. System.out.println ((char) 27 + "[31; 1mERROR" + (char) 27 + "[0m" выдает только "[31; 1mERROR [0m") при запуске из windows cmd.com в качестве исполняемого файла .jar
simpleuser
вопрос не был помечен windows. Я помню, что консоль Windows никогда не была ANSI-совместимой.
jcomeau_ictx
но проблема в том, что java не обрабатывает коды, независимо от поддержки
cmd.com
3
см. отредактированный ответ. Java делает именно так, как было сказано. проблема в несовместимой с ANSI консоли.
jcomeau_ictx
1
У меня та же проблема
sgrillon
7
Вы можете сделать это, используя escape-последовательности ANSI. На самом деле я собрал этот класс в Java для тех, кто хотел бы для этого простого обходного пути. Это позволяет больше, чем просто цветовые коды.
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");
Лучший способ раскрасить консольный текст - использовать управляющие коды ANSI . Помимо цвета текста, экранирующие коды ANSI допускают цвет фона, декорации и многое другое.
Библиотека Jansi немного более продвинутая (может использовать все функции управляющих кодов ANSI), предоставляет API и поддерживает Windows с использованием JNA.
В противном случае вы можете вручную определить свой собственный цвет, как показано, другие ответы.
Windows 10
Windows 10 (начиная с версии 10.0.10586 - ноябрь 2015 г.) поддерживает управляющие коды ANSI ( документация MSDN ), но по умолчанию она не включена. Чтобы включить это:
С API SetConsoleMode используйтеENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400) флаг. Янси использует эту опцию.
Если API-интерфейс SetConsoleMode не используется, можно изменить глобальный раздел реестра HKEY_CURRENT_USER\Console\VirtualTerminalLevel, создав dword и установив его в 0 или 1 для обработки ANSI:
"VirtualTerminalLevel"=dword:00000001
До Windows 10
Консоль Windows не поддерживает цвета ANSI. Но можно использовать консоль, которая делает.
«Пониженное голосование» не мое, но есть и другие ответы, которые задают вопрос ОП, и они были опубликованы некоторое время назад. При публикации ответа смотрите: Как мне написать хороший ответ? Пожалуйста, убедитесь, что вы добавили либо новое решение, либо существенно лучшее объяснение, особенно когда отвечаете на старые вопросы.
help-info.de
7
@ iSahil это, вероятно, было отвергнуто, потому что простая запись в стандартную ошибку явно ничего не окрашивает. Многие IDE и консоли будут интерпретировать сообщения об ошибках и печатать их красным или похожим цветом, но на это нельзя полагаться.
Дэвид
1
Хотя это не было прямым ответом на вопрос, заданный выше, это был ответ, который я искал, когда искал «java print in red console». Таким образом, я чувствую, что это имеет место на этой странице.
Мод
-2
Если вы используете Kotlin (который без проблем работает с Java), вы можете сделать такое перечисление:
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""}
И затем использовать как таковой: (код ниже демонстрирует различные стили для всех цветов)
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}")}
При работе в Windows, где эти коды ANSI не поддерживаются, isCompatibleпроверка позволяет избежать проблем, заменяя коды пустой строкой.
Ответы:
Если ваш терминал поддерживает это, вы можете использовать управляющие коды ANSI для использования цвета в выходных данных. Обычно это работает для приглашений оболочки Unix; однако, это не работает для командной строки Windows (хотя, это работает для Cygwin). Например, вы можете определить такие константы для цветов:
Затем вы можете ссылаться на них по мере необходимости.
Например, используя вышеуказанные константы, вы можете сделать следующий вывод красного текста на поддерживаемых терминалах:
Обновление: вы можете проверить библиотеку Янси . Он предоставляет API и поддерживает Windows с использованием JNI. Я еще не пробовал это; Однако это выглядит многообещающе.
Обновление 2: Кроме того, если вы хотите изменить цвет фона текста на другой цвет, вы можете попробовать следующее:
Например:
источник
if (System.console() == null) System.setProperty("jansi.passthrough", "true");
however it doesn't work for Windows command prompt
Вот список цветов в классе Java с
public static
полямииспользование
Примечание Не забудьте использовать
RESET
после печати, так как эффект останется, если он не очищенисточник
Я создал библиотеку под названием JCDP ( цветной принтер отладки Java ).
Для Linux, macOS и Windows 10 он использует управляющие коды ANSI, упомянутые WhiteFang, но абстрагирует их, используя слова вместо кодов, что гораздо более интуитивно понятно . Это становится так же просто, как:
У вас есть несколько примеров в Github-репозитории JCDP .
источник
Попробуйте следующее перечисление:
А теперь мы сделаем небольшой пример:
источник
Довольно портативный способ сделать это с помощью необработанных escape-последовательностей. См. Http://en.wikipedia.org/wiki/ANSI_escape_code
[отредактировано для user9999999 2017-02-20]
Java не «обрабатывает коды», это правда, но Java выводит то, что вы сказали, для вывода. Я не виноват в том, что консоль Windows рассматривает ESC (chr (27)) как еще один глиф (←).
источник
windows
. Я помню, что консоль Windows никогда не была ANSI-совместимой.Вы можете сделать это, используя escape-последовательности ANSI. На самом деле я собрал этот класс в Java для тех, кто хотел бы для этого простого обходного пути. Это позволяет больше, чем просто цветовые коды.
https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a
(Перенесено с: https://github.com/nathan-fiscaletti/ansi-util )
Пример использования:
источник
Если кто-то ищет быстрое решение, не стесняйтесь использовать следующий класс помощника :)
ИСПОЛЬЗОВАНИЕ:
Спасибо @ whiteFang34 за коды ANSI.
источник
Лучший способ раскрасить консольный текст - использовать управляющие коды ANSI . Помимо цвета текста, экранирующие коды ANSI допускают цвет фона, декорации и многое другое.
Юникс
Если вы используете springboot, для раскраски текста есть специальное перечисление: org.springframework.boot.ansi.AnsiColor
Библиотека Jansi немного более продвинутая (может использовать все функции управляющих кодов ANSI), предоставляет API и поддерживает Windows с использованием JNA.
В противном случае вы можете вручную определить свой собственный цвет, как показано, другие ответы.
Windows 10
Windows 10 (начиная с версии 10.0.10586 - ноябрь 2015 г.) поддерживает управляющие коды ANSI ( документация MSDN ), но по умолчанию она не включена. Чтобы включить это:
ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
флаг. Янси использует эту опцию.HKEY_CURRENT_USER\Console\VirtualTerminalLevel
, создав dword и установив его в 0 или 1 для обработки ANSI:"VirtualTerminalLevel"=dword:00000001
До Windows 10
Консоль Windows не поддерживает цвета ANSI. Но можно использовать консоль, которая делает.
источник
Использование функции цвета для печати текста с цветами
Код:
Использование:
источник
Вычеркнуть:
источник
Лучшее решение для печати любого текста красным цветом на Java:
источник
Если вы используете Kotlin (который без проблем работает с Java), вы можете сделать такое перечисление:
И затем использовать как таковой: (код ниже демонстрирует различные стили для всех цветов)
При работе в Windows, где эти коды ANSI не поддерживаются,
isCompatible
проверка позволяет избежать проблем, заменяя коды пустой строкой.источник