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

z0qdvdin  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(138)

我正在用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中有没有一个方法来检查这个?

svujldwt

svujldwt1#

一个简单的纯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上没有)。

k10s72fa

k10s72fa2#

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

相关问题