1.
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
/**
* CSV工具类
* @author Administrator
*
*/
public class CSVUtils {
/**
* 替换空格
* @param content
* @return
*/
public static String trimChars(String content){
if(content == null){
return "";
}
if(content.equals("")){
return "";
}
// @====> 1.包含,同事包含",那么久先替换双引号"为两个""+然后在包裹在双引号里。
if (content.contains(",") && content.contains("\"")) {
content = content.replaceAll(",", " "); // 逗号替换为空格
content = content.replaceAll("\"", "\"\"");
content = "\"" + content + "\"";
}else if (content.contains(",")) {
content = content.replaceAll(",", " ");
}else if (content.contains("null")){
content = content.replaceAll("null", "");
}else {
// @====> 2.如果仅仅包含逗号,则用引号包裹即可。
if (content.contains(",") && !content.contains("\"")) {
content = content.replaceAll(",", " "); // 逗号替换为空格
content = "\"" + content + "\"";
}
// @====> 3.如果仅仅包含引号,则双引号代替一个引号,再最外层在包裹即可。
if (content.contains("\"") && !content.contains(",")) {
content = "\"" + content.replaceAll("\"", "\"\"") + "\"";
}
}
content=content.replaceAll("\r|\n","");
return content;
}
/**
* 导出
*/
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("iso-8859-1");
response.setContentType("text/csv; charset=iso-8859-1");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fn.getBytes(), "iso-8859-1"));
// 写出响应
OutputStream os = response.getOutputStream();
os.write(content.getBytes("GBK"));
os.flush();
os.close();
}
}
2.
String colsName="列名" ;
String c = formatCsvData(resultList, colsName);
CsvWriter.exportCsv("导出文件名", c, response);
}
/**
* csv导出
* @param data
* @param displayColNames
* @return
*/
public static String formatCsvData(List data,
String displayColNames) {
StringBuffer buf = new StringBuffer();
String[] displayColNamesArr = null;
displayColNamesArr = displayColNames.split(",");
// 输出列头
for (int i = 0; i < displayColNamesArr.length; i++) {
buf.append(displayColNamesArr[i]).append(",");
}
buf.append("\r\n");
if (null != data) {
// 输出数据
for (int i = 0; i < data.size(); i++) {
Object[] vo = (Object[]) data.get(i);
buf.append(CommonUtil.killNull("'"+vo[0])).append(",")
.append(CommonUtil.killNull("'"+vo[1])).append(",")
.append(CommonUtil.killNull("'"+vo[2])).append(",")
.append(CommonUtil.killNull(vo[3])).append(",")
.append(CommonUtil.killNull(vo[4])).append(",")
.append(CommonUtil.killNull("'"+vo[5])).append(",")
.append(CommonUtil.killNull("'"+vo[6])).append(",")
.append(CommonUtil.killNull(vo[7])).append(",")
.append(CommonUtil.killNull(vo[8])).append(",")
.append(CommonUtil.killNull("\t"+vo[9])).append(",");
buf.append("\r\n");
}
}
return buf.toString();
}
}