I would like to produce nicely formatted tabular text from arbitrary dataset object models. Is there a good library to do this in Java?
Specifically, I want output that is formatted like command line data management tools such as the CLI for mysql. Example:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name | varchar(100) | YES | | NULL | |
| release | year(4) | YES | | NULL | |
| studio | varchar(50) | YES | | NULL | |
| review | varchar(50) | YES | | NULL | |
| gross | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
One main challenge is that I won't automatically know the maximum column widths before I start traversing the data. Also, there are plenty of edge cases, such as dealing with very large value lengths and large numbers of rows and columns.
If I have to build this myself, I imagine I would make use of String.format, and I'd need to pre-analyze the full dataset before starting the output. That's a very low level of coding though, so I'd love to find a good library that has already solved this problem.
Check out TableFormatter: it appears to do what you want for formatting tabular data. Source code is also available. You can append rows and cells to a table using a fluent interface approach. An example follows:
TableFormatter tf = new SimpleTableFormatter(true) // true = show border
.nextRow()
.nextCell()
.addLine("Field")
.nextCell()
.addLine("Type")
So it will build up the cells in the correct format and adjust whitespace accordingly. It also will allow you to do basic alignment of text within the cell (center, top, bottom)
trac.inamik.com/trac/jtable_format is under GPL license, not suitable in some cases.
Another option (Apache 2 license):
http://sourceforge.net/projects/texttablefmt/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With