Java中的延迟打印

时间:2012-03-31 17:19:14

标签: java printing io

我有一般控制台打印的具体问题,我想知道是否有人有解决方案。我正在尝试打印一个看起来像这样的dataTable:

Table
----------------------
Name    |Surname     |
----------------------
Mike    |Mikhailowish|
Rafaello|Mirena      |

等等。为了打印条形边框,我需要知道每个列值的最大长度是多少。我不想通过整个数据库找到它然后再打印它。我宁愿喜欢这样做:

System.out.printLater(s); //herejust leave a pointer to a StringBuilder you will build
...
s.append("--------");
...
System.out.printAllDeferred();

据我所知,上面可能有99.99999%的可能性,但也许你们有一个聪明的方法来实现上述目标?

2 个答案:

答案 0 :(得分:2)

您可以将PrintStream打包在ByteArrayOutputStream周围,然后使用该PrintStream而不是System.out(或使用System.setOut)打印到它。稍后您可以打印整个字节数组。

但这并没有真正帮助你,因为你必须调整所有列;更好地将db中的所有单元格收集到一个数组中并计算最大长度,然后打印该数组。

答案 1 :(得分:1)

如果有额外的查询不打扰你,也许你可以先找出每列的最大长度。

for (String name : columnNames) {

    select max(LEN(columnName)) as maxchar from YourTable

}

否则,正如其他人所说,你可以先在内存中读取整个表,然后这样做计算特定列的最大长度,这取决于你的堆大小是否足够大并且在内存中有完整的表不是问题。

但这真的取决于你的问题领域最好的方法。