it-swarm.com.de

So drucken Sie Farbe in der Konsole mit System.out.println?

Wie kann ich in der Konsole Farbe drucken? Ich möchte Daten in Farben anzeigen, wenn der Prozessor Daten sendet, und in verschiedenen Farben, wenn er Daten empfängt.

236
Taranath Datta

Wenn Ihr Terminal dies unterstützt, können Sie ANSI-Escape-Codes verwenden, um Farbe in Ihrer Ausgabe zu verwenden. Es funktioniert im Allgemeinen für Unix Shell-Eingabeaufforderungen. Es funktioniert jedoch nicht für die Windows-Eingabeaufforderung (obwohl es für Cygwin funktioniert). Beispielsweise könnten Sie Konstanten wie folgt für die Farben definieren:

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";

Dann können Sie diese bei Bedarf referenzieren.

Mit den obigen Konstanten können Sie beispielsweise den folgenden roten Text auf unterstützten Terminals ausgeben:

System.out.println(ANSI_RED + "This text is red!" + ANSI_RESET);

Update: Vielleicht möchten Sie die Bibliothek Jansi auschecken. Es bietet eine API und unterstützt Windows mit JNI. Ich habe es noch nicht probiert. es sieht jedoch vielversprechend aus.

Update 2: Wenn Sie die Hintergrundfarbe des Textes ändern möchten, können Sie auch Folgendes versuchen:

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";

Zum Beispiel:

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);
459
WhiteFang34

Ich habe eine Bibliothek namens JCDP ( Java Colored Debug Printer ) erstellt.

Für Linux werden die von WhiteFang erwähnten ANSI-Escape-Codes verwendet, diese werden jedoch mithilfe von Wörtern anstelle von Codes abstrahiert, was viel intuitiver ist. Es wird so einfach wie:

print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN);

Für Windows hängt es von JAnsi ab, erstellt jedoch darüber eine Abstraktionsebene, wobei die oben gezeigte intuitive und einfache API beibehalten wird.

Sie haben einige Beispiele unter JCDPs Github-Repository .

46
dialex

Hier finden Sie eine Liste von Farben in einer Java-Klasse mit public static-Feldern

Verwendungszweck

System.out.println(ConsoleColors.RED + "RED COLORED" +
ConsoleColors.RESET + " NORMAL");


Hinweis Vergessen Sie nicht, die Variable RESET nach dem Drucken zu verwenden, da der Effekt erhalten bleibt, wenn er nicht gelöscht wird


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
}
33
shakram02

Eine ziemlich tragbare Methode ist die Verwendung der rohen Escape-Sequenzen. Siehe http://en.wikipedia.org/wiki/ANSI_escape_code

[bearbeitet für den Benutzer9999999 am 2017-02-20]

Java "behandelt die Codes nicht", das stimmt, aber Java gibt aus, was Sie zur Ausgabe gesagt haben. Es ist nicht Javas Schuld, dass die Windows-Konsole ESC (chr (27)) wie eine andere Glyphe (←) behandelt.

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

14
jcomeau_ictx
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);
12
马哥私房菜

Sie können dies mit ANSI-Escape-Sequenzen tun. Ich habe diese Klasse in Java für jeden zusammengestellt, der eine einfache Problemumgehung dafür wünscht. Es ermöglicht die Verwendung von benutzerdefinierten Farbcodes im Text. 

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

Beispielverwendung:

Farbcodeformat MIT Hintergrundfarbe ->: Vordergrund, Hintergrund:

Farbcodeformat OHNE Hintergrundfarbe ->: Vordergrund, N:

Farbformat zurücksetzen -> [RC]

String ansiColoredString = ColorCodes.parseColors("Hello, This :blue,n:is[RC] a :red,white:response[RC].");

oder

String ansiColoredString = ColorCodes.RED + "Hello" + ColorCodes.WHITE + ", This is a " + ColorCodes.BLUE + "test";
6

Wenn jemand nach einer schnellen Lösung sucht, können Sie die folgende Hilfsklasse verwenden :)

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);
    }

}

VERWENDUNGSZWECK:

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");

Vielen Dank @ whiteFang34 für die ANSI-Codes.

5
Ajmal Salim

Der beste Weg, den Konsolentext zu färben, ist die Verwendung von ANSI-Escape-Codes . ANSI-Escape-Codes ermöglichen neben der Textfarbe auch Hintergrundfarbe, Dekorationen und mehr.

Unix

Wenn Sie Springboot verwenden, gibt es eine spezielle Enumeration für die Textfarbe: org.springframework.boot.ansi.AnsiColor

Jansi library ist etwas fortgeschrittener (kann alle ANSI-Escape-Code-Funktionen verwenden), stellt eine API bereit und verfügt über eine Unterstützung für Windows , die JNA verwendet.

Andernfalls können Sie Ihre eigene Farbe manuell definieren, wie andere Antworten zeigen.

Windows 10

Windows 10 (seit Build 10.0.10586 - November 2015) unterstützt ANSI-Escape-Codes ( MSDN-Dokumentation ) , aber ist standardmäßig nicht aktiviert. Um es zu aktivieren:

  • Verwenden Sie mit SetConsoleMode API das Flag ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400). Jansi nutzt diese Option.
  • Wenn die SetConsoleMode-API nicht verwendet wird, ist es möglich, den globalen Registrierungsschlüssel HKEY_CURRENT_USER\Console\VirtualTerminalLevel zu ändern, indem ein Dword erstellt und für die ANSI-Verarbeitung auf 0 oder 1 festgelegt wird: "VirtualTerminalLevel"=dword:00000001

Vor Windows 10

Die Windows-Konsole unterstützt keine ANSI-Farben. Es ist jedoch möglich, eine Konsole zu verwenden, die dies tut.

0
NayoR

Wenn Sie Kotlin verwenden (das nahtlos mit Java funktioniert), können Sie eine solche Aufzählung machen:

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 ""
}

Und dann ist die Verwendung so: (Code unten zeigt die verschiedenen Stile für alle Farben)

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}")
}

Bei Ausführung unter Windows, wo diese ANSI-Codes nicht unterstützt werden, werden durch die isCompatible-Prüfung Probleme vermieden, indem die Codes durch leere Zeichenfolge ersetzt werden.

0
Louis CAD