JavaScript
x
public void createCSV(Map<String, Object> map) {
String reportPath = "C:/Users/nandini/Desktop/file.csv";
try {
FileWriter fileWriter = new FileWriter(reportPath);
CSVWriter csvWriter = new CSVWriter(fileWriter,
CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
String[] header = map.keySet().toArray(new String[map.size()]);
Object[] data = map.values().toArray(new Object[map.size()]);
String[] stringArray = Arrays.copyOf(data, data.length, String[].class);
// adding data to csv
csvWriter.writeNext(header);
csvWriter.writeNext(stringArray);
csvWriter.close();
} catch (Exception e) {
logger.error(e);
}
}
Advertisement
Answer
This happens due to the following line:
JavaScript
String[] stringArray = Arrays.copyOf(data, data.length, String[].class);
The method Javadoc states that the method throws an ArrayStoreException
if an element copied from original is not of a runtime type that can be stored in an array of class newType.
So if the Object[]
array contains an element that is not a String
, this exception will be thrown. Instead of casting the element to a String
, you can get its string representation using the toString()
method:
JavaScript
String[] stringArray = Arrays.stream(data)
.map(Object::toString)
.toArray(size -> new String[size]);
EDIT:
Without streams…
JavaScript
String[] stringArray = new String[data.length];
for (int i = 0; i < data.length; i++) {
stringArray[i] = data[i].toString();
}