JAVA -- 生成CSV並上傳到 FTP 不生成本地檔案
阿新 • • 發佈:2018-12-18
直接上程式碼
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); // 用來存放表中資料 // 獲取第一個sheet sheet = 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; }