2011-04-23 158 views

回答

363

如果您的终端支持它,您可以使用ANSI escape codes在输出中使用颜色。它通常适用于Unix shell提示;但是,它不适用于Windows命令提示符(尽管它对Cygwin有效)。例如,您可以为这些颜色定义这些常数:

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

然后,您可以根据需要引用这些参数。

例如,使用上述参数,你可以做以下的红色文字输出上所支持的终端:

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

更新:你可能要检查出Jansi库。它提供了一个API,并使用JNI支持Windows。我还没有尝试过;不过,它看起来很有希望。

更新2:另外,如果你希望将文本的背景颜色更改为不同的颜色,你可以尝试以下方法,以及:

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

例如:

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); 
+0

@ WhiteFang34你可以解释一下,如果它的颜色是黑色,至少在我的控制台中,RESET的用途是什么?这是否像一个默认或某事? – Boro 2011-04-23 08:31:25

+1

@Boro:重置代码会关闭迄今为止设置的所有ANSI属性,这应该将控制台恢复为默认值。如果你不知道默认颜色,或者也使用其他一些属性,如背景颜色,字体样式等,这很有用。 – WhiteFang34 2011-04-23 08:38:10

+1

jansi真的很棒!对于那些在Eclipse中开发的人,我可以推荐这个插件:http://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/和一段代码来启用颜色,如果代码是不是在控制台中执行:'if(System.console()== null)System.setProperty(“jansi.passthrough”,“true”);' – 2014-04-13 19:51:16

13

一个相当便携的方式是使用原始转义序列。见http://en.wikipedia.org/wiki/ANSI_escape_code

[编辑的user9999999于2017年2月20日]

Java不“处理代码”,这是真的,但Java的输出你告诉它来输出。 Windows控制台将ESC(chr(27))视为另一个字形(←),这不是Java的错。

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

+0

这不起作用,因为Java IO层不会将它们转换为颜色。 System.out.println((char)27 +“[31; 1mERROR”+(char)27 +“[0m”只产生“[31; 1mERROR [0m”从Windows cmd.com作为可执行文件运行时.jar – simpleuser 2017-02-12 06:03:33

+0

这个问题没有被标记为'windows'.Windows控制台从来没有符合ANSI的标准,我记得 – 2017-02-12 14:52:50

+0

但问题是,java不处理代码,无论cmd.com的支持 – simpleuser 2017-02-20 17:31:44

30

我创建了一个名为JCDP库(的Java调试彩色打印机)。

对于Linux,它使用WhiteFang提到的ANSI转义码,但使用而不是代码对其进行了摘要,这更直观。

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

对于Windows它实际上包括JAnsi库,但在它创建了一个抽象层,保持对Linux产生的直观和简单的界面:当它变得容易。

此库许可证号为MIT License,因此请随时使用它。

看一看JCDP's github repository

+0

还有一个错字,其中一个子弹拼写动态拼写。 – 2012-01-14 18:37:30

+0

@DiAlex如果我能得到你的API副本,我很乐意。主页上的链接不再起作用,而是导致“404”。我可以在哪里下载? – 2015-01-05 06:09:50

+0

解决了,谢谢你让我知道 – dialex 2017-12-29 09:17:42

5

您可以使用ANSI转义序列来执行此操作。实际上,我已经将这个类放在了Java中,供任何想要简单解决此问题的人使用。它允许在文本中使用自定义颜色代码。

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

实施例使用:

WITH背景颜色的颜色代码格式 - >:前景,背景:

颜色代码格式没有背景颜色 - >:前景,N :

重置颜色格式 - > [RC]

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

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

下面是在Java类的颜色与public static字段

用法

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

列表0 注意 如果有人正在寻找一个快速解决方案,不要忘记使用RESET作为影响印刷后仍将如果它不被清除


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

,随意使用下面的辅助类:)

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

} 

用法:

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

Thanks @ whiteFang34 for the ANSI codes。