是否可以检测输出的去向 - 到终端还是到管道/文件?

Rog*_*ach 5 java io jvm scala

less例如,当我编写将文本输出到 stdout 并使用颜色(通过转义序列)的程序时,如果输出转到其他程序(例如, grep)或文件,我想禁用这些颜色,因为颜色代码会弄乱输出。

是否可以从Java进程中做到这一点?

Rog*_*ach 5

我通过以下方式解决了这个问题(此处描述):

Console如果有某个终端连接到应用程序,则System.console()将返回对象,null如果将输出通过管道传输到其他应用程序或将其保存到文件,它将返回。

因此它变成了一个简单的检查:

if (System.console() == null) {
  // ... no console, print dull plaintext
} else {
  // we have a console, now we can output colors as well
}
Run Code Online (Sandbox Code Playgroud)

(在 Linux Mint 10 上测试)