private void writeHeader(BufferedWriter writer, List<ColumnInfo> columns) throws IOException { for (int i = 0; i < columns.size(); i++) { ColumnInfo info = columns.get(i); writer.write(csvEscaper.escapeAndDelimite(info.getColumnName())); if (i < columns.size() - 1) { writer.write(config.getFieldSeparator()); } } writer.write(config.getLineDelimiter()); }
public String escapeAndDelimite(String text) { StringState stringState = findStringConfig(text); if (stringState == ROOT_STATE) { return text; } sb.setLength(0); if (stringState.needsDelimiter()) { sb.append(delimiterChar); } if (stringState.hasDelimiter()) { int textLength = text.length(); for (int i = 0; i < textLength; i++) { char c = text.charAt(i); if (c == delimiterChar) { sb.append(delimiterChar); } sb.append(c); } } else { sb.append(text); } if (stringState.needsDelimiter()) { sb.append(delimiterChar); } return sb.toString(); }
public CsvWriter(CsvConfiguration<T> config) { this.config = config; this.typeSerializer = config.getTypeSerializer(); this.columns = getEntityInfo(config).getColumns(); this.csvEscaper = new CsvEscaper(config); this.emptyText = Character.toString(config.getTextDelimiter()) + config.getTextDelimiter(); }
private void add(BufferedWriter writer, T entity) throws IOException { for (int i = 0; i < columns.size(); i++) { ColumnInfo column = columns.get(i); Object value = column.getAccessor().apply(entity); if (value != null) { String valueStr = typeSerializer.toString(value, column.getFieldType()); String escapedValue = csvEscaper.escapeAndDelimite(valueStr); writer.write(escapedValue); } else if (config.isAlwaysDelimitText()) { writer.write(emptyText); } if (i < columns.size() - 1) { writer.write(config.getFieldSeparator()); } } writer.write(config.getLineDelimiter()); }