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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值