package cn.com.test.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解
* @author: Rodge
* @time: 2017年12月25日 下午9:39:18
* @version: V1.0.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CSVField {
/**
* CSV文件列名
*/
public String name() default "";
}
csv工具类
package cn.com.javatest.utils;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.log4j.Logger;
import org.springframework.util.ReflectionUtils;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import cn.com.javatest.annotation.CSVField;
/**
* CSV工具类
*
* @author: Rodge
* @time: 2017年12月25日 下午10:02:08
* @version: V1.0.0
*/
public final class CSVUtils {
/** 日志对象 **/
private static final Logger LOGGER = Logger.getLogger(CSVUtils.class);
/** 临时文件**/
private static final String TEMP_PATH = "temp.csv";
/** 私有无参构造方法 **/
private CSVUtils() { }
/**
* 生成CSV文件
*
* @param filePath 文件保存路径,例如:D:/temp/test.csv
* @param beans 实体对象集合
*/
public static <T> void createCSVFile(String filePath, List<T> beans) {
CsvWriter writer = null;
try {
// 创建文件目录
createDir(filePath);
// 生成文件
writer = new CsvWriter(filePath, ',', Charset.forName("GBK"));
// 获取内容
List<String[]> contents = getStringArrayFromBean(beans);
// 写入内容
for (String[] each : contents) {
writer.writeRecord(each, true);
}
} catch (Exception e) {
LOGGER.error("生成CSV文件失败", e);
} finally {
if (writer != null) {
writer.close();
}
}
}
/**
* 导出CSV文件
*
* @param request 请求对象
* @param response 响应对象
* @param beans 实体对象集合
*/
public static <T> void exportCSVFile(HttpServletRequest request, HttpServletResponse response, List<T> beans) {
String path = request.getServletContext().getRealPath("/");
try (FileInputStream input = new FileInputStream(createFile(path + TEMP_PATH))) {
// 生成文件
CsvWriter writer = new CsvWriter(path + TEMP_PATH, ',', Charset.forName("GBK"));
// 获取内容
List<String[]> contents = getStringArrayFromBean(beans);
// 写入内容
for (String[] each : contents) {
writer.writeRecord(each, true);
}
writer.close();
// 导出文件
ServletOutputStream output = response.getOutputStream();
// 以当前时间作为文件名
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());