package org.ohdsi.utilities.files;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
public class WriteCSVFileWithHeader {
private CSVPrinter printer;
private boolean headerWritten = false;
public WriteCSVFileWithHeader(String fileName) {
this(fileName, CSVFormat.RFC4180);
}
public WriteCSVFileWithHeader(String fileName, CSVFormat format) {
try {
printer = new CSVPrinter(new FileWriter(fileName), format);
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
public void write(Row row) {
try {
if (!headerWritten)
writeHeader(row);
printer.printRecord(row.getCells());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
private void writeHeader(Row row) throws IOException {
headerWritten = true;
Map<String, Integer> fieldName2ColumnIndex = row.getfieldName2ColumnIndex();
int size = fieldName2ColumnIndex.size();
List<String> header = new ArrayList<String>(size);
for (int i = 0; i < size; i++)
header.add(null);
for (Map.Entry<String, Integer> entry : fieldName2ColumnIndex.entrySet())
header.set(entry.getValue(), entry.getKey());
printer.printRecord(header);
}
public void close() {
try {
printer.close();
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
}