Skip to content

Instantly share code, notes, and snippets.

@dotkebi
Created April 24, 2017 11:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dotkebi/c1f379ce3ae8672a1d56ba2596272b9d to your computer and use it in GitHub Desktop.
Save dotkebi/c1f379ce3ae8672a1d56ba2596272b9d to your computer and use it in GitHub Desktop.
CSVWriter with reflection
public class CSVWriter {
private static final String UTF8_BOM = "\uFEFF";
public void convert(HttpServletResponse response, List<?> datas, String name) {
write(response, transform(datas), name);
}
private List<String[]> transform(List<?> objects) {
List<String[]> dataToWrite = new ArrayList<>();
if (objects.size() == 0) {
return dataToWrite;
}
dataToWrite.add(makeHeader(objects.get(0).getClass()));
int i;
Field[] fields;
String[] columns;
for (Object dto : objects) {
i = 0;
fields = dto.getClass().getDeclaredFields();
columns = new String[fields.length];
for (Field field : fields) {
field.setAccessible(true);
try {
columns[i] = field.get(dto) == null ? "" : String.valueOf(field.get(dto));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
++i;
}
dataToWrite.add(columns);
}
return dataToWrite;
}
private String[] makeHeader(Class title) {
Field[] fields = title.getDeclaredFields();
String[] columns = new String[fields.length];
int i = 0;
for (Field field : fields) {
columns[i] = field.getName();
++i;
}
return columns;
}
private void write(HttpServletResponse response, List<String[]> datas, String name) {
response.addHeader("Content-disposition", "attachment;filename=" + name + ".csv");
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
try (
OutputStream outputStream = response.getOutputStream();
CSVWriter writer = new CSVWriter(new OutputStreamWriter(outputStream))
) {
//add BOM
outputStream.write(UTF8_BOM.getBytes());
writer.writeAll(datas);
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
}
private String removeUTF8BOM(String s) {
if (s.startsWith(UTF8_BOM)) {
s = s.substring(1);
}
return s;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment