importcom.opencsv.CSVWriter;importcom.opencsv.bean.StatefulBeanToCsv;importcom.opencsv.bean.StatefulBeanToCsvBuilder;importcom.opencsv.exceptions.CsvDataTypeMismatchException;importcom.opencsv.exceptions.CsvRequiredFieldEmptyException;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Component;importjavax.servlet.http.HttpServletResponse;import java.io.*;importjava.util.List;/*** CSV 工具类
*
*@authorjing*/@Slf4j
@Componentpublic class CSVUtils{/*** 将前台传递的数据生成csv文件
*@paramexportResults
*@paramfileName
*@paramheader
*@throwsIOException
*@throwsCsvDataTypeMismatchException
*@throwsCsvRequiredFieldEmptyException*/
public static void generateCsvFile(List exportResults, String fileName, String[] header) throwsIOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
Writer writer= newFileWriter(fileName);//写表头
CSVWriter csvWriter = newCSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
csvWriter.writeNext(header);//写内容
StatefulBeanToCsv beanToCsv = newStatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(exportResults);
csvWriter.close();
writer.close();
}/*** 读取csv文件流返回前端下载
*@paramfileName
*@paramresponse
*@throwsUnsupportedEncodingException*/
public static void readCsvFileStream(String fileName, HttpServletResponse response) throwsUnsupportedEncodingException {
String myFileName= new String(fileName.getBytes("utf-8"), "gbk");
File file= newFile(myFileName);if(file.exists()) {
response.setContentType("application/force-download");//设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + myFileName);//设置文件名
byte[] buffer = new byte[1024];
FileInputStream fis= null;
BufferedInputStream bis= null;try{
fis= newFileInputStream(file);
bis= newBufferedInputStream(fis);
OutputStream os=response.getOutputStream();int i =bis.read(buffer);while (i != -1) {
os.write(buffer,0, i);
i=bis.read(buffer);
}
}catch(Exception e) {
e.printStackTrace();
}finally{if (bis != null) {try{
bis.close();
}catch(IOException e) {
e.printStackTrace();
}
}if (fis != null) {try{
fis.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}if(file.delete()){
log.error(file.getName()+ " 文件已被删除!");
}else{
log.error("文件删除失败!");
}
}
}