• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

JAVA导出CSV文件实例教程

java 搞代码 4年前 (2022-01-05) 39次浏览 已收录 0个评论

这篇文章主要介绍了如何用JAVA导出CSV文件,文中案例代码十分详细,对大家的学习有所帮助,感兴趣的朋友可以了解下

以前导出总是用POI导出为Excel文件,后来当我了解到CSV以后,我发现速度飞快。

如果导出的数据不要求格式、样式、公式等等,建议最好导成CSV文件,因为真的很快。

虽然我们可以用Java再带的文件相关的类去操作以生成一个CSV文件,但事实上有好多第三方类库也提供了类似的功能。

这里我们使用apache提供的commons-csv组件

Commons CSV

文档在这里

http://commons.apache.org/

http://commons.apache.org/proper/commons-csv/

http://commons.apache.org/proper/commons-csv/user-guide.html

先看一下具体用法

 @Test public void testWrite() throws Exception { FileOutputStream fos = new FileOutputStream("E:/cjsworkspace/cjs-excel-demo/target/abc.csv"); OutputStreamWriter osw = new OutputStreamWriter(fos, "GB<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>K"); CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader("姓名", "年龄", "家乡"); CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);//  csvPrinter = CSVFormat.DEFAULT.withHeader("姓名", "年龄", "家乡").print(osw); for (int i = 0; i <10; i++) { csvPrinter.printRecord("张三", 20, "湖北"); } csvPrinter.flush(); csvPrinter.close(); } @Test public void testRead() throws IOException { InputStream is = new FileInputStream("E:/cjsworkspace/cjs-excel-demo/target/abc.csv"); InputStreamReader isr = new InputStreamReader(is, "GBK"); Reader reader = new BufferedReader(isr); CSVParser parser = CSVFormat.EXCEL.withHeader("name", "age", "jia").parse(reader);//  CSVParser csvParser = CSVParser.parse(reader, CSVFormat.DEFAULT.withHeader("name", "age", "jia")); List list = parser.getRecords();  for (CSVRecord record : list) { System.out.println(record.getRecordNumber()     + ":" + record.get("name")     + ":" + record.get("age")     + ":" + record.get("jia")); } parser.close(); } /** * Parsing an Excel CSV File  */ @Test public void testParse() throws Exception { Reader reader = new FileReader("C:/Users/Administrator/Desktop/abc.csv"); CSVParser parser = CSVFormat.EXCEL.parse(reader);  for (CSVRecord record : parser.getRecords()) { System.out.println(record); } parser.close(); } /** * Defining a header manually  */ @Test public void testParseWithHeader() throws Exception { Reader reader = new FileReader("C:/Users/Administrator/Desktop/abc.csv"); CSVParser parser = CSVFormat.EXCEL.withHeader("id", "name", "code").parse(reader);  for (CSVRecord record : parser.getRecords()) { System.out.println(record.get("id") + "," + record.get("name") + "," + record.get("code")); } parser.close(); } /** * Using an enum to define a header  */ enum MyHeaderEnum { ID, NAME, CODE; } @Test public void testParseWithEnum() throws Exception { Reader reader = new FileReader("C:/Users/Administrator/Desktop/abc.csv"); CSVParser parser = CSVFormat.EXCEL.withHeader(MyHeaderEnum.class).parse(reader);  for (CSVRecord record : parser.getRecords()) { System.out.println(record.get(MyHeaderEnum.ID) + "," + record.get(MyHeaderEnum.NAME) + "," + record.get(MyHeaderEnum.CODE)); } parser.close(); } private List<Map> recordList = new ArrayList(); @Before public void init() {  for (int i = 0; i <5; i++) { Map map = new HashMap(); map.put("name", "zhangsan"); map.put("code", "001"); recordList.add(map); } } @Test public void writeMuti() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(3); CountDownLatch doneSignal = new CountDownLatch(2); executorService.submit(new exprotThread("E:/0.csv", recordList, doneSignal)); executorService.submit(new exprotThread("E:/1.csv", recordList, doneSignal)); doneSignal.await(); System.out.println("Finish!!!"); } class exprotThread implements Runnable {  private String filename;  private List<Map> list;  private CountDownLatch countDownLatch;  public exprotThread(String filename, List<Map> list, CountDownLatch countDownLatch) {   this.filename = filename;   this.list = list;   this.countDownLatch = countDownLatch; } @Override  public void run() {   try { CSVPrinter printer = new CSVPrinter(new FileWriter(filename), CSVFormat.EXCEL.withHeader("NAME", "CODE"));    for (Map map : list) { printer.printRecord(map.values()); } printer.close(); countDownLatch.countDown(); } catch (IOException e) { e.printStackTrace(); } } } 

CSV与EXCEL

   /** * 测试写100万数据需要花费多长时间  */ @Test public void testMillion() throws Exception {  int times = 10000 * 10; Object[] cells = {"满100减15元", "100011", 15};  // 导出为CSV文件 long t1 = System.currentTimeMillis(); FileWriter writer = new FileWriter("G:/test1.csv"); CSVPrinter printer = CSVFormat.EXCEL.print(writer);  for (int i = 0; i <times; i++) { printer.printRecord(cells); } printer.flush(); printer.close();  long t2 = System.currentTimeMillis(); System.out.println("CSV: " + (t2 - t1));  // 导出为Excel文件 long t3 = System.currentTimeMillis(); XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet();  for (int i = 0; i <times; i++) { XSSFRow row = sheet.createRow(i);   for (int j = 0; j <cells.length; j++) { XSSFCell cell = row.createCell(j); cell.setCellValue(String.valueOf(cells[j])); } } FileOutputStream fos = new FileOutputStream("G:/test2.xlsx"); workbook.write(fos); fos.flush(); fos.close();  long t4 = System.currentTimeMillis(); System.out.println("Excel: " + (t4 - t3)); } 

Maven依赖

   org.apache.commonscommons-csv1.5 org.apache.poipoi3.17 org.apache.poipoi-ooxml3.17 junitjunit4.12test

最后,刚才的例子中只写了3个字段,100万行,生成的CSV文件有十几二十兆,太多的话建议分多个文件打包下周,不然想象一个打开一个几百兆的excel都费劲。

以上就是JAVA导出CSV文件实例教程的详细内容,更多关于JAVA导出CSV文件的资料请关注gaodaima搞代码网其它相关文章!

以上就是JAVA导出CSV文件实例教程的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:JAVA导出CSV文件实例教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址