Comment puis-je imprimer des couleurs dans la console? Je souhaite afficher les données en couleurs lorsque le processeur envoie des données et en différentes couleurs lorsqu'il reçoit des données.
Si votre terminal le prend en charge, vous pouvez utiliser les codes d'échappement ANSI pour utiliser la couleur dans votre sortie. Cela fonctionne généralement pour les invites du shell Unix; cependant, cela ne fonctionne pas pour l'invite de commande Windows (bien que cela fonctionne pour Cygwin). Par exemple, vous pouvez définir des constantes comme celles-ci pour les couleurs:
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
Ensuite, vous pouvez les référencer si nécessaire.
Par exemple, en utilisant les constantes ci-dessus, vous pouvez créer la sortie de texte rouge suivante sur les terminaux pris en charge:
System.out.println(ANSI_RED + "This text is red!" + ANSI_RESET);
Update: Vous voudrez peut-être consulter la bibliothèque Jansi . Il fournit une API et prend en charge Windows utilisant JNI. Je ne l'ai pas encore essayé Cependant, cela semble prometteur.
Update 2: De plus, si vous souhaitez modifier la couleur d'arrière-plan du texte en une couleur différente, vous pouvez également essayer les solutions suivantes:
public static final String ANSI_BLACK_BACKGROUND = "\u001B[40m";
public static final String ANSI_RED_BACKGROUND = "\u001B[41m";
public static final String ANSI_GREEN_BACKGROUND = "\u001B[42m";
public static final String ANSI_YELLOW_BACKGROUND = "\u001B[43m";
public static final String ANSI_BLUE_BACKGROUND = "\u001B[44m";
public static final String ANSI_PURPLE_BACKGROUND = "\u001B[45m";
public static final String ANSI_CYAN_BACKGROUND = "\u001B[46m";
public static final String ANSI_WHITE_BACKGROUND = "\u001B[47m";
Par exemple:
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);
J'ai créé une bibliothèque appelée JCDP (imprimante de débogage en couleur Java).
Pour Linux, il utilise les codes d’échappement ANSI mentionnés par WhiteFang, mais les résume en utilisant words au lieu de codes qui est beaucoup plus intuitif. Cela devient aussi simple que:
print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN);
Pour Windows, il inclut la bibliothèque JAnsi mais crée une couche d’abstraction sur celle-ci, en maintenant l’interface intuitive et simple créée pour Linux.
Cette bibliothèque est disponible sous la licence MIT , alors n'hésitez pas à l'utiliser.
Jetez un oeil sur le dépôt github de JCDP .
Voici une liste de couleurs dans une classe Java avec des champs public static
Utilisation
System.out.println(ConsoleColors.RED + "RED COLORED" +
ConsoleColors.RESET + " NORMAL");
Remarque N'oubliez pas d'utiliser la RESET
après l'impression car l'effet restera actif s'il n'est pas effacé.
public class ConsoleColors {
// Reset
public static final String RESET = "\033[0m"; // Text Reset
// Regular Colors
public static final String BLACK = "\033[0;30m"; // BLACK
public static final String RED = "\033[0;31m"; // RED
public static final String GREEN = "\033[0;32m"; // GREEN
public static final String YELLOW = "\033[0;33m"; // YELLOW
public static final String BLUE = "\033[0;34m"; // BLUE
public static final String PURPLE = "\033[0;35m"; // PURPLE
public static final String CYAN = "\033[0;36m"; // CYAN
public static final String WHITE = "\033[0;37m"; // WHITE
// Bold
public static final String BLACK_BOLD = "\033[1;30m"; // BLACK
public static final String RED_BOLD = "\033[1;31m"; // RED
public static final String GREEN_BOLD = "\033[1;32m"; // GREEN
public static final String YELLOW_BOLD = "\033[1;33m"; // YELLOW
public static final String BLUE_BOLD = "\033[1;34m"; // BLUE
public static final String PURPLE_BOLD = "\033[1;35m"; // PURPLE
public static final String CYAN_BOLD = "\033[1;36m"; // CYAN
public static final String WHITE_BOLD = "\033[1;37m"; // WHITE
// Underline
public static final String BLACK_UNDERLINED = "\033[4;30m"; // BLACK
public static final String RED_UNDERLINED = "\033[4;31m"; // RED
public static final String GREEN_UNDERLINED = "\033[4;32m"; // GREEN
public static final String YELLOW_UNDERLINED = "\033[4;33m"; // YELLOW
public static final String BLUE_UNDERLINED = "\033[4;34m"; // BLUE
public static final String PURPLE_UNDERLINED = "\033[4;35m"; // PURPLE
public static final String CYAN_UNDERLINED = "\033[4;36m"; // CYAN
public static final String WHITE_UNDERLINED = "\033[4;37m"; // WHITE
// Background
public static final String BLACK_BACKGROUND = "\033[40m"; // BLACK
public static final String RED_BACKGROUND = "\033[41m"; // RED
public static final String GREEN_BACKGROUND = "\033[42m"; // GREEN
public static final String YELLOW_BACKGROUND = "\033[43m"; // YELLOW
public static final String BLUE_BACKGROUND = "\033[44m"; // BLUE
public static final String PURPLE_BACKGROUND = "\033[45m"; // PURPLE
public static final String CYAN_BACKGROUND = "\033[46m"; // CYAN
public static final String WHITE_BACKGROUND = "\033[47m"; // WHITE
// High Intensity
public static final String BLACK_BRIGHT = "\033[0;90m"; // BLACK
public static final String RED_BRIGHT = "\033[0;91m"; // RED
public static final String GREEN_BRIGHT = "\033[0;92m"; // GREEN
public static final String YELLOW_BRIGHT = "\033[0;93m"; // YELLOW
public static final String BLUE_BRIGHT = "\033[0;94m"; // BLUE
public static final String PURPLE_BRIGHT = "\033[0;95m"; // PURPLE
public static final String CYAN_BRIGHT = "\033[0;96m"; // CYAN
public static final String WHITE_BRIGHT = "\033[0;97m"; // WHITE
// Bold High Intensity
public static final String BLACK_BOLD_BRIGHT = "\033[1;90m"; // BLACK
public static final String RED_BOLD_BRIGHT = "\033[1;91m"; // RED
public static final String GREEN_BOLD_BRIGHT = "\033[1;92m"; // GREEN
public static final String YELLOW_BOLD_BRIGHT = "\033[1;93m";// YELLOW
public static final String BLUE_BOLD_BRIGHT = "\033[1;94m"; // BLUE
public static final String PURPLE_BOLD_BRIGHT = "\033[1;95m";// PURPLE
public static final String CYAN_BOLD_BRIGHT = "\033[1;96m"; // CYAN
public static final String WHITE_BOLD_BRIGHT = "\033[1;97m"; // WHITE
// High Intensity backgrounds
public static final String BLACK_BACKGROUND_BRIGHT = "\033[0;100m";// BLACK
public static final String RED_BACKGROUND_BRIGHT = "\033[0;101m";// RED
public static final String GREEN_BACKGROUND_BRIGHT = "\033[0;102m";// GREEN
public static final String YELLOW_BACKGROUND_BRIGHT = "\033[0;103m";// YELLOW
public static final String BLUE_BACKGROUND_BRIGHT = "\033[0;104m";// BLUE
public static final String PURPLE_BACKGROUND_BRIGHT = "\033[0;105m"; // PURPLE
public static final String CYAN_BACKGROUND_BRIGHT = "\033[0;106m"; // CYAN
public static final String WHITE_BACKGROUND_BRIGHT = "\033[0;107m"; // WHITE
}
Une façon assez portable de le faire est d'utiliser les séquences d'échappement brutes. Voir http://en.wikipedia.org/wiki/ANSI_escape_code
[édité pour user9999999 le 2017-02-20]
Java ne "gère pas les codes", c'est vrai, mais Java génère ce que vous lui avez demandé de générer. ce n'est pas la faute de Java si la console Windows traite ESC (chr (27)) comme un autre glyphe (←).
public enum Color {
//颜色结尾字符串,重置颜色的
RESET("\033[0m"),
// Regular Colors 普通颜色,不带加粗,背景色等
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"); // WHITE
private final String code;
Color(String code) {
this.code = code;
}
@Override
public String toString() {
return code;
}
}
System.out.print(Color.BLACK_BOLD);
System.out.println("111111111aaaaaaaaaaaaaaaa==============");
System.out.print(Color.RESET);
System.out.print(Color.BLUE_BACKGROUND);
System.out.print(Color.YELLOW); //设置前景色 为YELLOW
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.print(Color.RESET);
Vous pouvez le faire en utilisant des séquences d'échappement ANSI. J'ai en fait mis en place cette classe en Java pour tous ceux qui souhaitent une solution de contournement simple. Il permet l’utilisation de codes de couleur personnalisés dans le texte.
https://Gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a
Exemple d'utilisation:
Format du code de couleur AVEC la couleur d'arrière-plan ->: avant-plan, arrière-plan:
Format du code de couleur SANS la couleur d'arrière-plan ->: avant-plan, N:
Réinitialiser le format de couleur -> [RC]
String ansiColoredString = ColorCodes.parseColors("Hello, This :blue,n:is[RC] a :red,white:response[RC].");
ou
String ansiColoredString = ColorCodes.RED + "Hello" + ColorCodes.WHITE + ", This is a " + ColorCodes.BLUE + "test";
Si quelqu'un recherche une solution rapide, n'hésitez pas à utiliser la classe d'assistance suivante :)
public class Log {
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
//info
public static void i(String className, String message) {
System.out.println(ANSI_GREEN + className + " : " + message + ANSI_RESET);
}
//error
public static void e(String className, String message) {
System.out.println(ANSI_RED + className + " : " + message + ANSI_RESET);
}
//debug
public static void d(String className, String message) {
System.out.println(ANSI_BLUE + className + " : " + message + ANSI_RESET);
}
//warning
public static void w(String className, String message) {
System.out.println(ANSI_YELLOW + className + " : " + message + ANSI_RESET);
}
}
UTILISATION:
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");
Merci @ whiteFang34 pour les codes ANSI.
La meilleure façon de colorer le texte de la console est d’utiliser les codes d’échappement ANSI . En plus de la couleur du texte, les codes d'échappement ANSI permettent la couleur d'arrière-plan, les décorations, etc.
Unix
Si vous utilisez springboot, il existe une énumération spécifique pour la coloration du texte: org.springframework.boot.ansi.AnsiColor
Jansi library est un peu plus avancé (peut utiliser toutes les fonctions des codes d’échappement ANSI), fournit une API et supporte pour Windows en utilisant JNA.
Sinon, vous pouvez définir manuellement votre propre couleur, comme indiqué pour les autres réponses.
Windows 10
Windows 10 (depuis la version 10.0.10586 - nov. 2015) prend en charge les codes d'échappement ANSI ( documentation MSDN ) mais mais ce n'est pas activé par défaut. Pour l'activer:
ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
. Jansi utilise cette option.HKEY_CURRENT_USER\Console\VirtualTerminalLevel
en créant un dword et en la définissant sur 0 ou 1 pour le traitement ANSI: "VirtualTerminalLevel"=dword:00000001
Avant Windows 10
La console Windows ne prend pas en charge les couleurs ANSI. Mais il est possible d'utiliser une console qui le fait.
Si vous utilisez Kotlin (qui fonctionne de manière transparente avec Java), vous pouvez créer une telle énumération:
enum class AnsiColor(private val colorNumber: Byte) {
BLACK(0), RED(1), GREEN(2), YELLOW(3), BLUE(4), Magenta(5), CYAN(6), WHITE(7);
companion object {
private const 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 ""
}
Et ensuite, l’utilisation est la suivante: (le code ci-dessous présente les différents styles pour toutes les couleurs)
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}")
}
Si vous utilisez Windows, où ces codes ANSI ne sont pas supportés, la vérification isCompatible
évite les problèmes en remplaçant les codes par une chaîne vide.