470 votes

Comment imprimer une couleur dans la console en utilisant System.out.println?

Comment puis-je imprimer de la couleur dans la console? Je veux afficher des données en couleurs lorsque le processeur envoie des données et dans des couleurs différentes lorsqu'il reçoit des données.

2 votes

Si la console prend en charge (par exemple, la console Java Eclipse) la personnalisation de la couleur de stdout/stderr, vous pouvez utiliser System.out.println pour une couleur et System.err.println pour une autre couleur.

12voto

thefiscster510 Points 213

Vous pourriez le faire en utilisant des séquences d'échappement ANSI. J'ai en fait mis en place cette classe en Java pour quiconque voudrait une solution de contournement simple pour cela. Il permet plus que des codes de couleurs.

https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a

Fonctionnalités

  • Documentation complète du code source
  • Prise en charge des couleurs 4 bits (16 couleurs)
  • Prise en charge des couleurs 8 bits (255 couleurs)
  • Prise en charge des couleurs 24 bits (16,7 millions de couleurs)
    • Valeurs RGB hexadécimales et 8 bits prises en charge
  • Prise en charge de la mise en forme commune
    • texte caché, inverser les couleurs, clignotement, souligné, barré, atténuation, gras, italique
  • Capacité à supprimer les séquences ANSI des chaînes contenant des séquences d'échappement ANSI.

Exemple d'utilisation

System.out.println(

new AnsiStringBuilder()
   // Toutes les fonctions de mise en forme prennent en charge au moins trois surcharges différentes,
       // chacune destinée à un cas d'utilisation différent.

   // Cas d'utilisation 1 : Réinitialisation manuelle
   .italic()
   .append("Ceci est en italique et réinitialisé manuellement.")
   // Vous pouvez éventuellement fournir une chaîne de texte supplémentaire
   // à l'une des fonctions de réinitialisation qui sera ajoutée
   // après que la réinitialisation de la mise en forme ait été appliquée.
   .resetItalic(System.lineSeparator())

   // Cas d'utilisation 2 : Réinitialisation automatique
   .dim("Ceci est atténué et réinitialisé automatiquement.")
   .append(System.lineSeparator())

   // Cas d'utilisation 3 : Consommateur de fonction
   .underline(
       sb -> {
           // Le générateur de chaînes de caractères passé à cette fonction consommatrice
           // enveloppera automatiquement tout le contenu ajouté à celui-ci
           // avec la mise en forme soulignée.
           sb.color24(
               "#00ff00",
               "Ceci est à la fois souligné et vert"
           );
       }
   )
   .append(System.lineSeparator())

);

11voto

Ajmal Salim Points 1281

Si quelqu'un cherche une solution rapide, n'hésitez pas à utiliser la classe d'aide 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,"Ceci est un message d'info");

Log.e(TAG,"Ceci est un message d'erreur");

Log.w(TAG,"Ceci est un message d'avertissement");

Log.d(TAG,"Ceci est un message de débogage");

Merci à @whiteFang34 pour les codes ANSI.

10voto

Mojtaba Hosseini Points 2525

Emoji

Vous pouvez utiliser des couleurs pour le texte comme d'autres l'ont mentionné dans leurs réponses.

Mais vous pouvez utiliser des emojis à la place ! Par exemple, vous pouvez utiliser ⚠️ pour les messages d'avertissement et

2 votes

Cela pourrait nécessiter une prise en charge UTF ou similaire. Vous ne fournissez que les résultats finaux, pas ce que le codeur doit faire pour cela. La réponse pourrait dépasser les limites de ce que la question englobait.

0 votes

Downvoted, pour les raisons mentionnées par Alexander

0 votes

Ajout des instructions sur la manière d'utiliser des emojis dans différents systèmes d'exploitation. @dialex

7voto

NayoR Points 373

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 de fond, les décorations et plus encore.

Unix

Si vous utilisez Spring Boot, il existe une énumération spécifique pour la coloration du texte : org.springframework.boot.ansi.AnsiColor

La bibliothèque Jansi est un peu plus avancée (peut utiliser toutes les fonctions des codes d'échappement ANSI), fournit une API et prend en charge Windows en utilisant JNA.

Autrement, vous pouvez définir manuellement votre propre couleur, comme indiqué dans d'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 il n'est pas activé par défaut. Pour l'activer :

  • Avec l'API SetConsoleMode, utilisez le drapeau ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400). Jansi utilise cette option.
  • Si l'API SetConsoleMode n'est pas utilisée, il est possible de modifier la clé de registre globale HKEY_CURRENT_USER\Console\VirtualTerminalLevel en créant un dword et en le définissant à 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.

0 votes

Sur Windows, la console Cygwin fait l'affaire. Aussi, lors de l'utilisation de pipelines avec par exemple "tee", alors les codes de couleur ANSI voient une interprétation et peut-être des effets aussi. Au-delà des codes de couleur, les échappements ANSI peuvent également faire par exemple du contrôle de curseur.

0 votes

Non, la variable doit se trouver dans la clé HKEY_CURRENT_USER\Console directement - ne créez pas une autre clé VirtualTerminalLevel à l'intérieur.

2voto

Shadi Abu Hilal Points 11

Utilisation de la fonction color pour imprimer du texte avec des couleurs

Code:

enum Color {

    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

    private final String code

    Color(String code) {
        this.code = code;
    }

    @Override
    String toString() {
        return code
    }
}

def color = { color, txt ->
    def RESET_COLOR = "\033[0m"
    return "${color}${txt}${RESET_COLOR}"
}

Usage:

test {
    println color(Color.CYAN, 'testing')
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X