不灭的焱

革命尚未成功,同志仍须努力 下载Java21

作者:AlbertWen  添加时间:2026-05-16 20:54:03  修改时间:2026-05-17 01:00:10  分类:07.Java框架/系统  编辑

Jansi 是一个轻量级 Java 库,让你在 Windows/Linux/macOS 的控制台 / 终端输出彩色文字、背景色、光标控制、清屏等 ANSI 转义码效果,解决了 Windows 控制台原生不支持 ANSI 颜色的问题。

一、核心特性

  1. 跨平台:Windows CMD/PowerShell、Linux、macOS 全支持
  2. 零配置:引入依赖即可使用
  3. 功能丰富:彩色文字、背景、光标移动、清屏、加粗、闪烁等
  4. 轻量级:无额外依赖

二、工作原理

在大多数 Unix 终端上,Java 通过 System.out 发送 ANSI 转义码时可以正常渲染。但在 Windows 上,这些转义码不会被解释,会显示为乱码。Jansi 解决了这个问题,它会检测并抽象附加终端的 ANSI 支持,根据平台和输出是否附加到真实终端,选择以下方式处理 ANSI 转义码:

  • 直接传递
  • 过滤掉
  • 使用平台特定 API 实现转义序列所代表的终端命令

三、快速开始(Maven/Gradle 引入)

1. Maven 依赖

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>2.4.3</version>
    <scope>compile</scope>
</dependency>

四、基础使用(3 行代码入门)

Jansi 使用静态常量定义颜色和样式,直接拼接在字符串中即可。

4.1 基本使用流程

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;

public class JansiDemo {
    public static void main(String[] args) {
        // 1. 初始化:让控制台支持 ANSI 转义码(必须写!Windows 必需要,Linux/macOS 可选)
        AnsiConsole.systemInstall();

        // 2. 输出彩色文字
        System.out.println(Ansi.ansi()
                .fgRed()      // 红色前景
                .a("Hello Jansi! ") // 输出内容
                .fgGreen()    // 绿色前景
                .a("彩色控制台")
                .reset());    // 重置样式(避免影响后续输出)

        // 3. 卸载(程序结束时执行)
        AnsiConsole.systemUninstall();
    }
}

4.2 安装和卸载机制

systemInstall() 和 systemUninstall() 方法是成对使用的,它们会跟踪调用次数,只有当 systemUninstall() 的调用次数与 systemInstall() 相匹配时,才会真正卸载。

// 支持嵌套调用
AnsiConsole.systemInstall(); // 计数: 1
AnsiConsole.systemInstall(); // 计数: 2
// ... 使用 Jansi
AnsiConsole.systemUninstall(); // 计数: 1
AnsiConsole.systemUninstall(); // 计数: 0,真正卸载

五、完整样式指南(颜色 / 背景 / 样式)

1. 基础颜色(前景 / 背景)

 

前景色(文字色) 背景色 颜色
fgBlack() bgBlack() 黑色
fgRed() bgRed() 红色
fgGreen() bgGreen() 绿色
fgYellow() bgYellow() 黄色
fgBlue() bgBlue() 蓝色
fgMagenta() bgMagenta() 品红
fgCyan() bgCyan() 青色
fgWhite() bgWhite() 白色
fgDefault() bgDefault() 默认色

2. 高亮色(亮色系)

fgBrightRed() / bgBrightRed(),以此类推(所有颜色都支持 Bright 版本)

3. 文字样式

  • bold():加粗
  • underline():下划线
  • blink():闪烁(部分终端支持)
  • inverse():反色(前景背景互换)
  • reset()重置所有样式(必须用,防止样式污染) 

六、常用功能示例(直接复制运行)

1. 彩色文字 + 背景组合

System.out.println(Ansi.ansi()
        .bgBlue()     // 蓝色背景
        .fgWhite()    // 白色文字
        .bold()       // 加粗
        .a(" 蓝底白字加粗 ")
        .reset());

2. 多行彩色输出

System.out.println(Ansi.ansi()
        .fgRed().a("错误信息")
        .fgYellow().a(" 警告信息")
        .fgGreen().a(" 成功信息")
        .reset());

3. 清屏 + 光标控制

// 清屏
System.out.println(Ansi.ansi().clearScreen());
// 光标移动到 (行, 列)
System.out.println(Ansi.ansi().cursor(5, 10).a("我在坐标(5,10)"));
// 光标上移 2 行
System.out.println(Ansi.ansi().cursorUp(2));

4. 动态进度条(实用场景)

for (int i = 0; i <= 100; i++) {
    System.out.print(Ansi.ansi()
            .fgCyan()
            .a("进度: ")
            .fgGreen()
            .a(i + "% ")
            .cursorToColumn(10) // 光标回到行首
            .reset());
    Thread.sleep(50);
}

5. 简化写法(推荐)

直接用 Ansi 字符串语法,更简洁:

System.out.println(Ansi.ansi().fg(Ansi.Color.RED).a("红色文字").reset());

七、Windows 系统必看(关键配置)

Windows CMD/PowerShell 默认不支持 ANSI 颜色,必须执行:

AnsiConsole.systemInstall(); // 启用 ANSI 支持
  • 程序结束时可以执行 AnsiConsole.systemUninstall();
  • IDEA 终端:直接支持,无需额外配置

八、高级用法

1. 自定义 RGB 颜色(24 位真彩色)

// 前景 RGB(255,100,0)
System.out.println(Ansi.ansi().fgRgb(255, 100, 0).a("橙色文字").reset());

2. 封装工具类(项目中直接用)

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;

public class ColorUtil {
    // 初始化(程序启动时调用一次)
    static {
        AnsiConsole.systemInstall();
    }

    public static String red(String msg) {
        return Ansi.ansi().fgRed().a(msg).reset().toString();
    }

    public static String green(String msg) {
        return Ansi.ansi().fgGreen().a(msg).reset().toString();
    }

    public static String yellow(String msg) {
        return Ansi.ansi().fgYellow().a(msg).reset().toString();
    }
}

使用:

System.out.println(ColorUtil.red("错误:连接失败"));
System.out.println(ColorUtil.green("成功:操作完成"));

九、常见问题

1. 颜色不生效?

  • 忘记写 AnsiConsole.systemInstall();
  • Windows 旧版 CMD 建议升级到 Win10+
  • IDEA 中开启:Settings → Editor → Color Scheme → Console Colors → 勾选 ANSI colors

2. 输出乱码?

  • 控制台编码设置为 UTF-8
  • 不要遗漏 .reset(),避免样式污染