CSV相干类
CSV相关类
/** * The table model for csv file content * * @author Peter * */ public class CSVTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private String[] columnNames; private List<Map<String, String>> tableDataList; public CSVTableModel(int columnCount) { if (columnCount < 1) throw new IllegalArgumentException("columnCount is less than 1."); columnNames = createColumnNames(columnCount); tableDataList = createTableDataList(new String[0][0], columnNames); } public CSVTableModel(String[][] tableData) { if (tableData == null) throw new IllegalArgumentException( "columnNames or tableData is null."); int columnCount = -1; for (String[] rowData : tableData) { if (rowData != null && rowData.length > columnCount) columnCount = rowData.length; } if (columnCount < 1) throw new IllegalArgumentException( "tableData's column number is less than 1."); columnNames = createColumnNames(columnCount); tableDataList = createTableDataList(tableData, columnNames); } public CSVTableModel(String[] columnNames) { this(columnNames, new String[0][0]); } public CSVTableModel(String[] columnNames, String[][] tableData) { if (columnNames == null || tableData == null) throw new IllegalArgumentException( "columnNames or tableData is null."); this.columnNames = Arrays.copyOf(columnNames, columnNames.length); this.tableDataList = createTableDataList(tableData, columnNames); } private static String[] createColumnNames(int columnCount) { String[] columnNames = new String[columnCount]; for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) { String columnName = ""; if (columnIndex >= 26) { columnName = columnNames[columnIndex - 26]; } columnName += ((char) (columnIndex % 26) + 'A'); } return columnNames; } private static List<Map<String, String>> createTableDataList( String[][] tableData, String[] columnNames) { List<Map<String, String>> tableDataList = new ArrayList<Map<String, String>>(); for (String[] rowData : tableData) { tableDataList.add(toRowMap(rowData, columnNames)); } return tableDataList; } private static Map<String, String> toRowMap(String[] rowData, String[] columnNames) { if (rowData == null) rowData = new String[0]; Map<String, String> rowMap = new HashMap<String, String>(); for (int i = 0; i < columnNames.length; i++) { if (i < rowData.length) rowMap.put(columnNames[i], rowData[i]); else rowMap.put(columnNames[i], ""); } return rowMap; } @Override public int getRowCount() { return tableDataList.size(); } @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int column) { return columnNames[column]; } @Override public Object getValueAt(int rowIndex, int columnIndex) { String columnName = getColumnName(columnIndex); return getCellAt(rowIndex, columnName); } public Object getCellAt(int rowIndex, String columnName) { Map<String, String> row = getRow(rowIndex); return row.get(columnName); } public Map<String, String> getRow(int rowIndex) { return tableDataList.get(rowIndex); } }