检查控制台是否支持Java中的ANSI转义码

问题描述 投票:6回答:2

我正在用Java构建一个程序,它使用ANSI转义码使用不同颜色的菜单。就像是

System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");

问题是我想检查将要执行代码的控制台是否支持使用此代码,因此如果没有,则打印没有代码的替代版本。

它将类似于:

if(console.supportsANSICode){
   System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
}
else{
   System.out.println("Menu option");
}

java中有一个方法可以检查吗?

java ansi
2个回答
4
投票

一个简单的纯Java解决方案:

if (System.console() != null && System.getenv().get("TERM") != null) {
    System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
} else {
    System.out.println("Menu option");
}

第一个术语用于检查是否连接了终端,第二个用于查看是否定义了TERM env var(不在Windows上)。这并不完美,但在我的情况下运作良好。


1
投票

我不知道Java是否有一些特殊的方法可以解决这个问题,但有两种方法可以解决问题本身。使用的常用方法(至少在unix世界中)是从TERM环境变量中获取终端,并从terminfo / termcap数据库中查找它的功能(通常使用cursesslang)。另一种更粗略的方法是发送设备状态报告代码("\u001B[6n")并检查终端是否响应。这当然有点像黑客,因为支持DSR代码的终端可能不支持颜色。

© www.soinside.com 2019 - 2024. All rights reserved.