1,controller层(接收数据为List<Map<String, Object>>类型,MyBatis resultType类型为java.util.HashMap)
* 导出用户数据
* @param response
*/
@RequestMapping("/userDoExport")
public void doExport(HttpServletResponse response) {
List<Map<String, Object>> dataList = null;
String displayColNames = null;
String matchColNames = null;
String fileName = null;
String content = null;
dataList = this.userService.selectUserAll();
// 完成数据csv文件的封装
displayColNames = "用户id,用户名,密码,头像,个性签名,手机号,时间";
matchColNames = "u_id,u_name,password,headimage,remarks,u_phone,create_time";
fileName = "user";
content = CsvWriter.formatCsvData(dataList, displayColNames,matchColNames);
try {
CsvWriter.exportCsv(fileName, content, response);
} catch (IOException e) {
e.getMessage();
}
}
2、CsvWrite工具类
public class CsvWriter {
/** CSV文件列分隔符 */
private static final String CSV_COLUMN_SEPARATOR = ",";
/** CSV文件列分隔符 */
private static final String CSV_RN = "\r\n";
/**
*
* 将检索数据输出的对应的csv列中
* */
public static String formatCsvData(List<Map<String, Object>> data,
String displayColNames, String matchColNames) {
StringBuffer buf = new StringBuffer();
String[] displayColNamesArr = null;
String[] matchColNamesMapArr = null;
displayColNamesArr = displayColNames.split(",");
matchColNamesMapArr = matchColNames.split(",");
// 输出列头
for (int i = 0; i < displayColNamesArr.length; i++) {
buf.append(displayColNamesArr[i]).append(CSV_COLUMN_SEPARATOR);
}
buf.append(CSV_RN);
if (null != data) {
// 输出数据
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < matchColNamesMapArr.length; j++) {
buf.append(data.get(i).get(matchColNamesMapArr[j])).append(
CSV_COLUMN_SEPARATOR);
}
buf.append(CSV_RN);
}
}
return buf.toString();
}
public static String formatCsvData1(List<Map<String, Object>> data, String title, String table) {
StringBuffer buf = new StringBuffer();
StringBuffer bufTitle = new StringBuffer();
String[] fields=null;
fields = title.split(",");
bufTitle.append(table).append(StringUtils.repeat(",", fields.length - 1)).append(CSV_RN);
bufTitle.append(title).append(CSV_RN);
int dataCount = data.size();
int successCount = 0;
for (Object obj : data)
{
Class<?> objClass = obj.getClass();
try {
for (int i = 0; i < fields.length; i++)
{
String name = fields[i];
String getMethodName = "get" + toFirstLetterUpperCase(name);
try {
Object value = objClass.getMethod(getMethodName).invoke(obj);
if (objClass.getMethod(getMethodName).getReturnType() == Date.class) {
/* value = com.sooying.mmys.core.util.DateUtils.ymdhmsFormat((Date) value);*/
value=DateUtils.dateToString((Date) value);
}
if (null == value || value == "") {
buf.append("");
if (i < fields.length - 1) {
buf.append(CSV_COLUMN_SEPARATOR);
}
} else {
String v = value.toString().replaceAll("\"", "\"\"");
buf.append(v.contains(",") ? String.format("\"%s\"", v) : value.toString());
if (i < fields.length - 1) {
buf.append(CSV_COLUMN_SEPARATOR);
}
}
} catch (Exception e) {
return null;
}
}
buf.append(CSV_RN);
} catch (Exception e) {
return null;
}
successCount++;
}
if(dataCount<successCount)
{
return null;
}
bufTitle.append(buf);
return bufTitle.toString();
}
public static void exportCsv(String fileName, String content,
HttpServletResponse response) throws IOException {
// 设置文件后缀
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhh24mmss");
String fn = fileName.concat(sdf.format(new Date()).toString() + ".csv");
// 读取字符编码
/* String csvEncoding = PropertiesUtil.getProperty("CSV_ENCODING");
// 设置响应
response.setCharacterEncoding(csvEncoding);*/
response.setContentType("text/csv; charset=" + "utf-8");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fn.getBytes(), "utf-8"));
// 写出响应
OutputStream os = response.getOutputStream();
os.write(content.getBytes("GBK"));
os.flush();
os.close();
}
public static String toFirstLetterUpperCase(String str) {
if (str == null || str.length() < 2) {
return str;
}
String firstLetter = str.substring(0, 1).toUpperCase();
return firstLetter + str.substring(1, str.length());
}
}