java匯出檔案之Excel(CSV)下並以流形式輸出
阿新 • • 發佈:2019-02-07
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
@Test public void write(){ try { // 建立CSV寫物件 List<Student> ls=new ArrayList<Student>(); for (int i = 0; i <1000000; i++) { Student s=new Student(); s.setName("小帥"+i); s.setAge(i); s.setScore("100"+i); s.setSex("男"+i); ls.add(s); } //寫入臨時檔案 File tempFile = File.createTempFile("vehicle", ".csv"); CsvWriter csvWriter = new CsvWriter(tempFile.getCanonicalPath(),',', Charset.forName("UTF-8")); // 寫表頭 long s= System.currentTimeMillis(); System.err.println(); String[] headers = {"姓名","年齡","編號","性別"}; csvWriter.writeRecord(headers); for (Student stu : ls) { csvWriter.write(stu.getName()); csvWriter.write(stu.getAge()+""); csvWriter.write(stu.getScore()); csvWriter.write(stu.getSex()); csvWriter.endRecord(); } csvWriter.close(); long e=System.currentTimeMillis(); System.err.println(e-s);; /** * 寫入csv結束,寫出流 */ java.io.OutputStream out = getResponse.getOutputStream(); byte[] b = new byte[10240]; java.io.File fileLoad = new java.io.File(tempFile.getCanonicalPath()); getResponse.reset(); getResponse.setContentType("application/csv"); getResponse.setHeader("content-disposition", "attachment; filename=vehicleModel.csv"); long fileLength = fileLoad.length(); String length1 = String.valueOf(fileLength); getResponse.setHeader("Content_Length", length1); java.io.FileInputStream in = new java.io.FileInputStream(fileLoad); int n; while ((n = in.read(b)) != -1) { out.write(b, 0, n); //每次寫入out1024位元組 } in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } }
網上找太多,眼逗看累了。自己寫個簡單的
參考文章:http://blog.csdn.net/loongshawn/article/details/53423121
ps:version我本地只能用2.0;以流的形式寫出遊覽器不用做操作檔案會直接下載;
2:因為csvWriter不提供類似Poi的寫入流workbook.write(out);故在csv寫入資料完之後,要手動把檔案寫入流;