我可以使用 Java 找到控制台宽度吗?
有没有办法找到运行 Java 程序的控制台的宽度?
如果可能的话,我希望这是跨平台的...
我不想更改缓冲区或窗口的宽度,我只想知道它的宽度,以便我可以正确格式化正在打印到屏幕的文本。
有没有办法找到运行 Java 程序的控制台的宽度?
如果可能的话,我希望这是跨平台的...
我不想更改缓冲区或窗口的宽度,我只想知道它的宽度,以便我可以正确格式化正在打印到屏幕的文本。
这个问题没有可靠的跨平台解决方案。实际上,在某些情况下,不可能知道真正的控制台宽度是多少。
(有关在某些时间和/或某些平台上有效的方法,请参阅其他答案。但要注意限制...)
例如,在 Linux 系统上,您通常可以从 LINES 和 COLUMNS 环境变量中找出名义上的终端尺寸。虽然当您调整某些“终端仿真器”窗口大小时,这些变量会自动更新,但情况并非总是如此。实际上,在通过telnet协议连接的远程控制台的情况下,没有办法将实际的终端尺寸获取到用户的shell中。
编辑:只是为了补充一点,如果用户在启动Java应用程序后在Linux上更改了他/她的xterm的尺寸,Java应用程序将不会收到通知,并且它不会看到反映在其和环境变量副本中的新维度!LINES
COLUMNS
编辑2:我的错误:并且是shell变量,默认情况下它们不会导出到环境中。您可以通过在运行 Java 应用程序之前运行来“修复”此问题。LINES
COLUMNS
bash
export COLUMNS LINES
实际上,在Java中已经存在一个Java库来做到这一点:JLine 2。(SourceForce上有一个旧版本,但GitHub的链接似乎是最新的。
这在Linux(Mint 14)和Windows(我不知道是什么版本)下使用JLine 2.11对我有用:
terminalWidth = jline.TerminalFactory.get().getWidth();
JLine承诺也会在Mac上工作。
我发现它在Eclipse控制台下返回了不好的宽度(比如!)(但即使是Java的本机控制台在Eclipse下也不起作用!),不幸的是,在Cygwin下也是如此。但是我已经使用检查不合理值()的代码解决了这个问题,并且在这些情况下只使用80。1
< 10
JLine 3 的更新(根据标记 — 谢谢,伙计!):
terminalWidth = org.jline.terminal.TerminalBuilder.terminal().getWidth()