直接上代码
POM.XML 这里只是主要的jar
<dependency><groupId>net.sf.supercsv</groupId><artifactId>super-csv</artifactId><version>2.4.0</version>
</dependency>
/*** 导出csv文件** @param fileName 要导出的文件名(包含路径)* @param content* 内容* @throws IOException*/public boolean exportToCsv(String fileName, List<String[]> content){log.info("转化csv开始:fileName: " + fileName + ",data个数:" + content.size());if (!fileName.endsWith(".csv")) {log.error("fileName有误,需要以.csv结尾!");return false;}boolean result = false;ICsvListWriter writer = null;InputStream in = null;File file = null;try {file = new File(fileName);String[] header = getHeaderFromTemplate();log.info("从模版中获取head个数:" + header.length);writer = new CsvListWriter(new FileWriter(file), CsvPreference.EXCEL_PREFERENCE);if (header.length > 0){writer.writeHeader(header);}for (String[] array : content) {for (int i=0;i<array.length;i++){if (isNumeric(array[i])){array[i] = array[i] + "\t";}}writer.write(array);}in = new FileInputStream(file);writer.flush();fileStreamUpload.uploadFile(in, fileName);log.info("导出csv结束");result = true;file.delete();}catch (Exception e){log.error("导出csv异常,异常原因:" + e.getMessage());e.printStackTrace();}finally {IOUtils.closeQuietly(writer);IOUtils.closeQuietly(in);file.delete();}return result;}/*** 获取excel模板中获取 header* @return*/private static String[] getHeaderFromTemplate() {log.info("从模版中获取header开始");List<String> headerList = new ArrayList<>();Sheet sheet = null;Row row = null;Row rowHeader = null;Workbook wb = null;InputStream is = null;try {is = ExcelExportUtil.class.getResourceAsStream("/template/policy_Template.xlsx");wb = new XSSFWorkbook(is);// 用来存放表中数据// 获取第一个sheetsheet = wb.getSheetAt(0);// 获取第一行rowHeader = sheet.getRow(0);row = sheet.getRow(0);// 获取最大列数int colnum = row.getPhysicalNumberOfCells();for (int j = 0; j < colnum; j++) {headerList.add(rowHeader.getCell(j).getStringCellValue());}} catch (FileNotFoundException e) {log.error("/template/policy_Template.xlsx,模版文件不存在!");e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {IOUtils.closeQuietly(is);IOUtils.closeQuietly(wb);}return headerList.toArray(new String[headerList.size()]);}/**** 判断字符串是否为数字(包含小数点)* @param str* @return*/private static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]+\\.*[0-9]*");Matcher isNum = pattern.matcher(str);if( !isNum.matches() ){return false;}return true;}
关于上传FTP代码 可看上一篇文章JAVA -- 生成Excel 并上传到 FTP 不生成本地文件
public void uploadFile(InputStream inputStream,String fileName) {BufferedInputStream inBuf = null;String ftpPath = "/export_file_path/";// 数据库存入地址try {inBuf = new BufferedInputStream(inputStream);// 开始上传文件FileFtp ftp = new FileFtp();ftp.login(ftpIp, ftpUser, ftpPassWord);ftp.CreateDirecroty(ftpPath);ftp.uploadFile(inBuf, fileName);} catch (IOException e) {e.printStackTrace();} finally {try {if (inputStream != null)inputStream.close();if (inBuf != null)inBuf.close();} catch (IOException e) {e.printStackTrace();}}}