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.

784voto

WhiteFang34 Points 28652

Si votre terminal le prend en charge, vous pouvez utiliser codes d'échappement ANSI pour utiliser des couleurs dans votre sortie. En général, cela fonctionne pour les invites de shell Unix; cependant, cela ne fonctionne pas pour l'invite de commandes Windows (bien que cela fonctionne pour Cygwin). Par exemple, vous pourriez 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 pourriez les référencer au besoin.

Par exemple, en utilisant les constantes ci-dessus, vous pourriez obtenir la sortie texte rouge suivante sur des terminaux pris en charge:

System.out.println(ANSI_RED + "Ce texte est rouge!" + ANSI_RESET);

Mise à jour: Vous voudrez peut-être jeter un œil à la bibliothèque Jansi. Elle fournit une API et a un support pour Windows en utilisant JNI. Je ne l'ai pas encore essayée; cependant, cela semble prometteur.

Mise à jour 2: De plus, si vous souhaitez changer la couleur de fond du texte pour une couleur différente, vous pouvez également essayer ce qui suit:

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 + "Ce texte a un fond vert mais un texte standard!" + ANSI_RESET);
System.out.println(ANSI_RED + "Ce texte a un texte rouge mais un fond standard!" + ANSI_RESET);
System.out.println(ANSI_GREEN_BACKGROUND + ANSI_RED + "Ce texte a un fond vert et un texte rouge!" + ANSI_RESET);

1 votes

@WhiteFang34 Pouvez-vous expliquer s'il vous plaît quel est l'usage de RESET si sa couleur est NOIRE, du moins dans ma console ? Est-ce comme une valeur par défaut ou quelque chose du genre ?

9 votes

@Boro: le code de réinitialisation désactive toutes les attributs ANSI définis jusqu'à présent, ce qui devrait ramener la console à ses paramètres par défaut. C'est utile si vous ne connaissez pas la couleur par défaut ou si vous utilisez également d'autres attributs comme la couleur d'arrière-plan, les styles de police, etc.

2 votes

Jansi est vraiment génial! pour ceux qui développent dans eclipse, je recommande ce plugin: mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console et un joli morceau de code pour activer la couleur si le code n'est pas exécuté dans la console: if (System.console() == null) System.setProperty("jansi.passthrough", "true");

177voto

shakram02 Points 1933

Voici une liste de couleurs dans une classe Java avec des champs public static

Utilisation

System.out.println(ConsoleColors.RED + "COLORÉ EN ROUGE" +
ConsoleColors.RESET + " NORMAL");

Remarque N'oubliez pas d'utiliser le RESET après l'impression car l'effet restera s'il n'est pas effacé

public class ConsoleColors {
    // Réinitialiser
    public static final String RESET = "\033[0m";  // Réinitialisation du texte

    // Couleurs régulières
    public static final String BLACK = "\033[0;30m";   // NOIR
    public static final String RED = "\033[0;31m";     // ROUGE
    public static final String GREEN = "\033[0;32m";   // VERT
    public static final String YELLOW = "\033[0;33m";  // JAUNE
    public static final String BLUE = "\033[0;34m";    // BLEU
    public static final String PURPLE = "\033[0;35m";  // VIOLET
    public static final String CYAN = "\033[0;36m";    // CYAN
    public static final String WHITE = "\033[0;37m";   // BLANC

    // Gras
    public static final String BLACK_BOLD = "\033[1;30m";  // NOIR
    public static final String RED_BOLD = "\033[1;31m";    // ROUGE
    public static final String GREEN_BOLD = "\033[1;32m";  // VERT
    public static final String YELLOW_BOLD = "\033[1;33m"; // JAUNE
    public static final String BLUE_BOLD = "\033[1;34m";   // BLEU
    public static final String PURPLE_BOLD = "\033[1;35m"; // VIOLET
    public static final String CYAN_BOLD = "\033[1;36m";   // CYAN
    public static final String WHITE_BOLD = "\033[1;37m";  // BLANC

    // Souligné
    public static final String BLACK_UNDERLINED = "\033[4;30m";  // NOIR
    public static final String RED_UNDERLINED = "\033[4;31m";    // ROUGE
    public static final String GREEN_UNDERLINED = "\033[4;32m";  // VERT
    public static final String YELLOW_UNDERLINED = "\033[4;33m"; // JAUNE
    public static final String BLUE_UNDERLINED = "\033[4;34m";   // BLEU
    public static final String PURPLE_UNDERLINED = "\033[4;35m"; // VIOLET
    public static final String CYAN_UNDERLINED = "\033[4;36m";   // CYAN
    public static final String WHITE_UNDERLINED = "\033[4;37m";  // BLANC

    // Arrière-plan
    public static final String BLACK_BACKGROUND = "\033[40m";  // NOIR
    public static final String RED_BACKGROUND = "\033[41m";    // ROUGE
    public static final String GREEN_BACKGROUND = "\033[42m";  // VERT
    public static final String YELLOW_BACKGROUND = "\033[43m"; // JAUNE
    public static final String BLUE_BACKGROUND = "\033[44m";   // BLEU
    public static final String PURPLE_BACKGROUND = "\033[45m"; // VIOLET
    public static final String CYAN_BACKGROUND = "\033[46m";   // CYAN
    public static final String WHITE_BACKGROUND = "\033[47m";  // BLANC

    // Haute intensité
    public static final String BLACK_BRIGHT = "\033[0;90m";  // NOIR
    public static final String RED_BRIGHT = "\033[0;91m";    // ROUGE
    public static final String GREEN_BRIGHT = "\033[0;92m";  // VERT
    public static final String YELLOW_BRIGHT = "\033[0;93m"; // JAUNE
    public static final String BLUE_BRIGHT = "\033[0;94m";   // BLEU
    public static final String PURPLE_BRIGHT = "\033[0;95m"; // VIOLET
    public static final String CYAN_BRIGHT = "\033[0;96m";   // CYAN
    public static final String WHITE_BRIGHT = "\033[0;97m";  // BLANC

    // Gras haute intensité
    public static final String BLACK_BOLD_BRIGHT = "\033[1;90m"; // NOIR
    public static final String RED_BOLD_BRIGHT = "\033[1;91m";   // ROUGE
    public static final String GREEN_BOLD_BRIGHT = "\033[1;92m"; // VERT
    public static final String YELLOW_BOLD_BRIGHT = "\033[1;93m";// JAUNE
    public static final String BLUE_BOLD_BRIGHT = "\033[1;94m";  // BLEU
    public static final String PURPLE_BOLD_BRIGHT = "\033[1;95m";// VIOLET
    public static final String CYAN_BOLD_BRIGHT = "\033[1;96m";  // CYAN
    public static final String WHITE_BOLD_BRIGHT = "\033[1;97m"; // BLANC

    // Arrière-plans haute intensité
    public static final String BLACK_BACKGROUND_BRIGHT = "\033[0;100m";// NOIR
    public static final String RED_BACKGROUND_BRIGHT = "\033[0;101m";// ROUGE
    public static final String GREEN_BACKGROUND_BRIGHT = "\033[0;102m";// VERT
    public static final String YELLOW_BACKGROUND_BRIGHT = "\033[0;103m";// JAUNE
    public static final String BLUE_BACKGROUND_BRIGHT = "\033[0;104m";// BLEU
    public static final String PURPLE_BACKGROUND_BRIGHT = "\033[0;105m"; // VIOLET
    public static final String CYAN_BACKGROUND_BRIGHT = "\033[0;106m";  // CYAN
    public static final String WHITE_BACKGROUND_BRIGHT = "\033[0;107m";   // BLANC
}

8 votes

A bien fonctionné dans la console IntelliJ, merci!

0 votes

C'est une excellente réponse. Ce serait bien si quelqu'un pouvait l'éditer pour italique aussi, si pris en charge, pour plus de complétude. Merci!

90voto

DiAlex Points 542

J'ai créé une bibliothèque appelée JColor qui fonctionne sur Linux, macOS et Windows 10.

Elle utilise les codes ANSI mentionnés par WhiteFang, mais les abstrait en utilisant des mots au lieu de codes ce qui est plus intuitif. Récemment, j'ai ajouté un support pour les couleurs de 8 et 24 bits.

2 votes

Agréable. Fonctionne comme prévu.

2 votes

Trop merveilleux! Je l'ai adoré! Merci! :)

0 votes

Trouvé. implémentation 'com.diogonunes:JColor:5.5.1'

73voto

马哥私房菜 Points 229

Essayez l'enumération suivante :

enum Couleur {
    //Fin de la chaîne de couleur, réinitialisation de la couleur
    RESET("\033[0m"),

    // Couleurs normales. Couleur normale, pas de gras, de couleur de fond, etc.
    BLACK("\033[0;30m"),    // NOIR
    RED("\033[0;31m"),      // ROUGE
    GREEN("\033[0;32m"),    // VERT
    YELLOW("\033[0;33m"),   // JAUNE
    BLUE("\033[0;34m"),     // BLEU
    MAGENTA("\033[0;35m"),  // MAGENTA
    CYAN("\033[0;36m"),     // CYAN
    WHITE("\033[0;37m"),    // BLANC

    // Gras
    BLACK_BOLD("\033[1;30m"),   // NOIR
    RED_BOLD("\033[1;31m"),     // ROUGE
    GREEN_BOLD("\033[1;32m"),   // VERT
    YELLOW_BOLD("\033[1;33m"),  // JAUNE
    BLUE_BOLD("\033[1;34m"),    // BLEU
    MAGENTA_BOLD("\033[1;35m"), // MAGENTA
    CYAN_BOLD("\033[1;36m"),    // CYAN
    WHITE_BOLD("\033[1;37m"),   // BLANC

    // Souligné
    BLACK_UNDERLINED("\033[4;30m"),     // NOIR
    RED_UNDERLINED("\033[4;31m"),       // ROUGE
    GREEN_UNDERLINED("\033[4;32m"),     // VERT
    YELLOW_UNDERLINED("\033[4;33m"),    // JAUNE
    BLUE_UNDERLINED("\033[4;34m"),      // BLEU
    MAGENTA_UNDERLINED("\033[4;35m"),   // MAGENTA
    CYAN_UNDERLINED("\033[4;36m"),      // CYAN
    WHITE_UNDERLINED("\033[4;37m"),     // BLANC

    // Fond
    BLACK_BACKGROUND("\033[40m"),   // NOIR
    RED_BACKGROUND("\033[41m"),     // ROUGE
    GREEN_BACKGROUND("\033[42m"),   // VERT
    YELLOW_BACKGROUND("\033[43m"),  // JAUNE
    BLUE_BACKGROUND("\033[44m"),    // BLEU
    MAGENTA_BACKGROUND("\033[45m"), // MAGENTA
    CYAN_BACKGROUND("\033[46m"),    // CYAN
    WHITE_BACKGROUND("\033[47m"),   // BLANC

    // Haute intensité
    BLACK_BRIGHT("\033[0;90m"),     // NOIR
    RED_BRIGHT("\033[0;91m"),       // ROUGE
    GREEN_BRIGHT("\033[0;92m"),     // VERT
    YELLOW_BRIGHT("\033[0;93m"),    // JAUNE
    BLUE_BRIGHT("\033[0;94m"),      // BLEU
    MAGENTA_BRIGHT("\033[0;95m"),   // MAGENTA
    CYAN_BRIGHT("\033[0;96m"),      // CYAN
    WHITE_BRIGHT("\033[0;97m"),     // BLANC

    // Gras haute intensité
    BLACK_BOLD_BRIGHT("\033[1;90m"),    // NOIR
    RED_BOLD_BRIGHT("\033[1;91m"),      // ROUGE
    GREEN_BOLD_BRIGHT("\033[1;92m"),    // VERT
    YELLOW_BOLD_BRIGHT("\033[1;93m"),   // JAUNE
    BLUE_BOLD_BRIGHT("\033[1;94m"),     // BLEU
    MAGENTA_BOLD_BRIGHT("\033[1;95m"),  // MAGENTA
    CYAN_BOLD_BRIGHT("\033[1;96m"),     // CYAN
    WHITE_BOLD_BRIGHT("\033[1;97m"),    // BLANC

    // Arrière-plans haute intensité
    BLACK_BACKGROUND_BRIGHT("\033[0;100m"),     // NOIR
    RED_BACKGROUND_BRIGHT("\033[0;101m"),       // ROUGE
    GREEN_BACKGROUND_BRIGHT("\033[0;102m"),     // VERT
    YELLOW_BACKGROUND_BRIGHT("\033[0;103m"),    // JAUNE
    BLUE_BACKGROUND_BRIGHT("\033[0;104m"),      // BLEU
    MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"),   // MAGENTA
    CYAN_BACKGROUND_BRIGHT("\033[0;106m"),      // CYAN
    WHITE_BACKGROUND_BRIGHT("\033[0;107m");     // BLANC

    private final String code;

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

    @Override
    public String toString() {
        return code;
    }
}

Et maintenant nous allons faire un petit exemple :

class RunApp {
    public static void main(String[] args) {

        System.out.print(Couleur.BLACK_BOLD);
        System.out.println("Noir_Gras");
        System.out.print(Couleur.RESET);

        System.out.print(Couleur.YELLOW);
        System.out.print(Couleur.BLUE_BACKGROUND);
        System.out.println("JAUNE & BLEU");
        System.out.print(Couleur.RESET);

        System.out.print(Couleur.YELLOW);
        System.out.println("JAUNE");
        System.out.print(Couleur.RESET);
    }
}

9 votes

Voici une copie de la réponse stackoverflow.com/a/45444716/675577

0 votes

@dialex Cette réponse semble provenir initialement de w3schools et cette réponse fournit les constantes sous forme d'énumération, ce qui, à mon avis, est un code plus propre, plus moderne et une meilleure pratique pour maintenir ces constantes.

0 votes

Je suis d'accord avec toi sur ça

14voto

jcomeau_ictx Points 15736

Une manière assez portable de le faire est avec les séquences d'échappement brutes. Voir http://en.wikipedia.org/wiki/ANSI_escape_code

[édité pour l'utilisateur 9999999 le 20-02-2017]

Java ne "gère pas les codes", c'est vrai, mais Java affiche ce que vous lui avez demandé d'afficher. Ce n'est pas la faute de Java si la console Windows traite ESC (chr(27)) comme juste un autre glyphe (←).

you made me boot into Windows. you owe me, bro

0 votes

Ce qui ne fonctionne pas car la couche Java IO ne convertit pas ces codes en couleurs. System.out.println((char)27 + "[31;1mERREUR" + (char)27 + "[0m" ne renvoie que "[31;1mERREUR[0m" lorsqu'il est exécuté à partir d'un cmd.com Windows en tant que fichier .jar exécutable

0 votes

La question n'était pas balisée windows. La console Windows n'a jamais été conforme à la norme ANSI à ma connaissance.

0 votes

Mais le problème est que java ne gère pas les codes, quel que soit le support de cmd.com

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