在Java开发中,为控制台输出添加颜色可以有效提升信息展示的可读性和交互性,例如用不同颜色区分日志级别、突出重要数据或美化命令行工具界面,本文将详细介绍Java设置控制台输出颜色的多种方法,涵盖跨平台实现、第三方库应用及ANSI颜色代码的使用技巧。

跨平台实现:System.out与ANSI转义码
Java本身不直接提供控制台颜色设置API,但可通过ANSI(美国国家标准协会)转义码实现跨平台颜色渲染,ANSI转义码是一组以\u001B[开头的特殊字符,用于控制终端显示样式,主流操作系统(如Linux、macOS及Windows 10+的默认终端)均支持ANSI颜色代码。
基本ANSI颜色代码
ANSI颜色代码分为前景色(文字颜色)和背景色,格式为:
- 前景色:
\u001B[3Xm(X为颜色代码,30-37) - 背景色:
\u001B[4Xm(X为颜色代码,40-47) - 重置样式:
\u001B[0m
常用颜色代码如下:
- 黑色:30/40,红色:31/41,绿色:32/42,黄色:33/43
- 蓝色:34/44,品红:35/45,青色:36/46,白色:37/47
示例代码
public class AnsiColorDemo {
public static void main(String[] args) {
// 红色文字 + 绿色背景
System.out.println("\u001B[31m\u001B[42m这是红色文字绿色背景\u001B[0m");
// 蓝色文字 + 重置样式
System.out.println("\u001B[34m蓝色文字" + "\u001B[0m恢复默认");
}
}
Windows平台兼容性处理
旧版Windows(如Windows 7/8)或CMD终端默认不支持ANSI转义码,需通过Jansi库或Windows API启用支持,以Jansi为例,它是专门为Java设计的跨平台终端渲染库,可自动处理Windows终端兼容性问题。

Jansi库使用步骤
-
添加依赖(Maven):
<dependency> <groupId>org.fusesource.jansi</groupId> <artifactId>jansi</artifactId> <version>2.4.0</version> </dependency> -
示例代码:
import org.fusesource.jansi.Ansi; import org.fusesource.jansi.AnsiConsole; public class JansiDemo { public static void main(String[] args) { AnsiConsole.systemInstall(); // 安装Jansi驱动 System.out.println(Ansi.ansi().fg(Ansi.Color.RED).a("红色文字").reset()); System.out.println(Ansi.ansi().bg(Ansi.Color.BLUE).a("蓝色背景文字").reset()); AnsiConsole.systemUninstall(); // 卸载驱动 } }
第三方库简化开发:Colored Strings
手动编写ANSI代码较为繁琐,可借助第三方库如Colored Strings或Java Colorful简化操作,以Java Colorful为例,它提供了链式调用API,支持颜色、样式(粗体、下划线等)组合。
Java Colorful库使用
-
添加依赖(Maven):

<dependency> <groupId>com.github.lalyos</groupId> <artifactId>jfiglet</artifactId> <version>0.0.8</version> </dependency> -
示例代码:
import org.fusesource.jansi.Ansi; import static org.fusesource.jansi.Ansi.*; public class ColorfulDemo { public static void main(String[] args) { System.out.println(ansi().eraseScreen().fg(RED).a("红色粗体").bold().reset()); System.out.println(ansi().fg(GREEN).a("绿色普通文字").reset()); System.out.println(ansi().fg(BLUE).a(underline("蓝色下划线")).reset()); } }
自定义颜色工具类
为提高代码复用性,可封装一个颜色工具类,统一管理ANSI转义码。
public class ConsoleColors {
// 前景色
public static final String BLACK = "\u001B[30m";
public static final String RED = "\u001B[31m";
public static final String GREEN = "\u001B[32m";
// 其他颜色省略...
public static final String RESET = "\u001B[0m";
public static void printColored(String color, String text) {
System.out.println(color + text + RESET);
}
public static void main(String[] args) {
printColored(RED, "这是一条红色错误信息");
printColored(GREEN, "这是一条绿色成功信息");
}
}
注意事项
- 终端兼容性:ANSI代码在IDE内置终端(如IntelliJ IDEA、Eclipse)中可能显示异常,建议在系统终端(如Windows Terminal、macOS Terminal)中运行。
- 重置样式:每次使用颜色后务必调用重置代码(
\u001B[0m),否则后续输出可能继承样式。 - 性能影响:频繁使用ANSI转义码可能对性能产生轻微影响,建议在日志输出等高频场景中合理使用。
通过以上方法,开发者可根据项目需求选择合适的方案实现控制台颜色输出,提升程序的可读性和用户体验,对于复杂场景,推荐使用Jansi或Java Colorful等成熟库,兼顾功能性与兼容性。


















