Class TableWriter

All Implemented Interfaces:
Closeable, Flushable, Appendable, AutoCloseable

public class TableWriter extends FilterWriter
A character stream that can be used to format tables. Columns are separated by tabulations ( '\t') and rows are separated by line terminators ('\r', '\n' or "\r\n"). Every table's cells are stored in memory until flush() is invoked. When invoked, flush() copy cell's contents to the underlying stream while replacing tabulations by some amount of spaces. The exact number of spaces is computed from cell's widths. TableWriter produces correct output when displayed with a monospace font.

For example, the following code...
     TableWriter out = new TableWriter(new OutputStreamWriter(System.out), 3);
     out.write("Prénom\tNom\n");
     out.nextLine('-');
     out.write("Idéphonse\tLaporte\nSarah\tCoursi\nYvan\tDubois");
     out.flush();
 
...produces the following output:
      Prénom      Nom
      ---------   -------
      Idéphonse   Laporte
      Sarah       Coursi
      Yvan        Dubois
 
Since:
2.0
Author:
Martin Desruisseaux (IRD)
  • Field Details

    • ALIGN_LEFT

      public static final int ALIGN_LEFT
      A possible value for cell alignment. This specifies that the text is aligned to the left indent and extra whitespace should be placed on the right.
      See Also:
    • ALIGN_RIGHT

      public static final int ALIGN_RIGHT
      A possible value for cell alignment. This specifies that the text is aligned to the right indent and extra whitespace should be placed on the left.
      See Also:
    • ALIGN_CENTER

      public static final int ALIGN_CENTER
      A possible value for cell alignment. This specifies that the text is aligned to the center and extra whitespace should be placed equally on the left and right.
      See Also:
    • SINGLE_VERTICAL_LINE

      public static final String SINGLE_VERTICAL_LINE
      A column separator for constructor.
      Since:
      2.5
      See Also:
    • DOUBLE_VERTICAL_LINE

      public static final String DOUBLE_VERTICAL_LINE
      A column separator for constructor.
      Since:
      2.5
      See Also:
    • SINGLE_HORIZONTAL_LINE

      public static final char SINGLE_HORIZONTAL_LINE
      A line separator for .
      Since:
      2.5
      See Also:
    • DOUBLE_HORIZONTAL_LINE

      public static final char DOUBLE_HORIZONTAL_LINE
      A line separator for .
      Since:
      2.5
      See Also:
  • Constructor Details

    • TableWriter

      public TableWriter(Writer out)
      Creates a new table writer with a default column separator.

      Note: this writer may produces bad output on Windows console, unless the underlying stream use the correct codepage (e.g. OutputStreamWriter(System.out, "Cp437")). To display the appropriate codepage for a Windows NT console, type chcp on the command line.

      Parameters:
      out - Writer object to provide the underlying stream, or null if there is no underlying stream. If out is null, then the toString() method is the only way to get the table's content.
    • TableWriter

      public TableWriter(Writer out, int spaces)
      Creates a new table writer with the specified amount of spaces as column separator.
      Parameters:
      out - Writer object to provide the underlying stream, or null if there is no underlying stream. If out is null, then the toString() method is the only way to get the table's content.
      spaces - Amount of white spaces to use as column separator.
    • TableWriter

      public TableWriter(Writer out, String separator)
      Creates a new table writer with the specified column separator.
      Parameters:
      out - Writer object to provide the underlying stream, or null if there is no underlying stream. If out is null, then the toString() method is the only way to get the table's content.
      separator - String to write between columns. Drawing box characters are treated specially. For example " \\u2502 " can be used for a single-line box.
      See Also:
  • Method Details

    • setMultiLinesCells

      public void setMultiLinesCells(boolean multiLines)
      Sets the desired behavior for EOL and tabulations characters.
      • If true, EOL ('\r', '\n' or "\r\n") and tabulations ( '\t') characters are copied straight into the current cell, which mean that next write operations will continue inside the same cell.
      • If false, then tabulations move to next column and EOL move to the first cell of next row (i.e. tabulation and EOL are equivalent to nextColumn() and nextLine() calls respectively).
      The default value is false.
      Parameters:
      multiLines - true true if EOL are used for line feeds inside current cells, or false if EOL move to the next row.
    • isMultiLinesCells

      public boolean isMultiLinesCells()
      Tells if EOL characters are used for line feeds inside current cells.
      Returns:
      true if EOL characters are to be write inside the cell.
    • setColumnAlignment

      public void setColumnAlignment(int column, int alignment)
      Sets the alignment for all cells in the specified column. This method overwrite the alignment for all previous cells in the specified column.
      Parameters:
      column - The 0-based column number.
      alignment - Cell alignment. Must be ALIGN_LEFT ALIGN_RIGHT or ALIGN_CENTER.
    • setAlignment

      public void setAlignment(int alignment)
      Sets the alignment for current and next cells. Change to the alignment doesn't affect the alignment of previous cells and previous rows. The default alignment is ALIGN_LEFT.
      Parameters:
      alignment - Cell alignment. Must be ALIGN_LEFT ALIGN_RIGHT or ALIGN_CENTER.
    • getAlignment

      public int getAlignment()
      Returns the alignment for current and next cells.
      Returns:
      Cell alignment: ALIGN_LEFT (the default), ALIGN_RIGHT or ALIGN_CENTER.
    • getRowCount

      public int getRowCount()
      Returns the number of rows in this table. This count is reset to 0 by flush().
      Returns:
      The number of rows in this table.
      Since:
      2.5
    • getColumnCount

      public int getColumnCount()
      Returns the number of columns in this table.
      Returns:
      The number of colunms in this table.
      Since:
      2.5
    • write

      public void write(int c)
      Write a single character. If isMultiLinesCells() is false (which is the default), then:
      • Tabulations ('\t') are replaced by nextColumn() invocations.
      • Line separators ('\r', '\n' or "\r\n") are replaced by nextLine() invocations.
      Overrides:
      write in class FilterWriter
      Parameters:
      c - Character to write.
    • write

      public void write(String string)
      Writes a string. Tabulations and line separators are interpreted as by write(int).
      Overrides:
      write in class Writer
      Parameters:
      string - String to write.
    • write

      public void write(String string, int offset, int length)
      Writes a portion of a string. Tabulations and line separators are interpreted as by write(int).
      Overrides:
      write in class FilterWriter
      Parameters:
      string - String to write.
      offset - Offset from which to start writing characters.
      length - Number of characters to write.
    • write

      public void write(char[] cbuf)
      Writes an array of characters. Tabulations and line separators are interpreted as by write(int).
      Overrides:
      write in class Writer
      Parameters:
      cbuf - Array of characters to be written.
    • write

      public void write(char[] cbuf, int offset, int length)
      Writes a portion of an array of characters. Tabulations and line separators are interpreted as by write(int).
      Overrides:
      write in class FilterWriter
      Parameters:
      cbuf - Array of characters.
      offset - Offset from which to start writing characters.
      length - Number of characters to write.
    • writeHorizontalSeparator

      public void writeHorizontalSeparator()
      Writes an horizontal separator.
    • nextColumn

      public void nextColumn()
      Moves one column to the right. Next write operations will occur in a new cell on the same row.
    • nextColumn

      public void nextColumn(char fill)
      Moves one column to the right. Next write operations will occur in a new cell on the same row. This method fill every remaining space in the current cell with the specified character. For example calling nextColumn('*') from the first character of a cell is a convenient way to put a pad value in this cell.
      Parameters:
      fill - Character filling the cell (default to whitespace).
    • nextLine

      public void nextLine()
      Moves to the first column on the next row. Next write operations will occur on a new row.
    • nextLine

      public void nextLine(char fill)
      Moves to the first column on the next row. Next write operations will occur on a new row. This method fill every remaining cell in the current row with the specified character. Calling nextLine('-') from the first column of a row is a convenient way to fill this row with a line separator.
      Parameters:
      fill - Character filling the rest of the line (default to whitespace). This caracter may be use as a row separator.
      See Also:
    • flush

      public void flush() throws IOException
      Flushs the table content to the underlying stream. This method should not be called before the table is completed (otherwise, columns may have the wrong width).
      Specified by:
      flush in interface Flushable
      Overrides:
      flush in class FilterWriter
      Throws:
      IOException - if an output operation failed.
    • close

      public void close() throws IOException
      Flushs the table content and close the underlying stream.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class FilterWriter
      Throws:
      IOException - if an output operation failed.
    • toString

      public String toString()
      Returns the table content as a string.
      Overrides:
      toString in class Object