欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA導(dǎo)出CSV文件實(shí)例教程

 更新時(shí)間:2020年06月01日 17:12:30   作者:森欄  
這篇文章主要介紹了如何用JAVA導(dǎo)出CSV文件,文中案例代碼十分詳細(xì),對(duì)大家的學(xué)習(xí)有所幫助,感興趣的朋友可以了解下

以前導(dǎo)出總是用POI導(dǎo)出為Excel文件,后來(lái)當(dāng)我了解到CSV以后,我發(fā)現(xiàn)速度飛快。

如果導(dǎo)出的數(shù)據(jù)不要求格式、樣式、公式等等,建議最好導(dǎo)成CSV文件,因?yàn)檎娴暮芸臁?/p>

雖然我們可以用Java再帶的文件相關(guān)的類去操作以生成一個(gè)CSV文件,但事實(shí)上有好多第三方類庫(kù)也提供了類似的功能。

這里我們使用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, "GBK");

  CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader("姓名", "年齡", "家鄉(xiāng)");
  CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);//  csvPrinter = CSVFormat.DEFAULT.withHeader("姓名", "年齡", "家鄉(xiāng)").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<CSVRecord> 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<String, String>> recordList = new ArrayList<>();

 @Before public void init() {  for (int i = 0; i < 5; i++) {
   Map<String, String> 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<String, String>> list;  private CountDownLatch countDownLatch;  public exprotThread(String filename, List<Map<String, String>> 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<String, String> map : list) {
     printer.printRecord(map.values());
    }
    printer.close();
    countDownLatch.countDown();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

CSV與EXCEL

  /**
  * 測(cè)試寫100萬(wàn)數(shù)據(jù)需要花費(fèi)多長(zhǎng)時(shí)間  */
 @Test public void testMillion() throws Exception {  int times = 10000 * 10;
  Object[] cells = {"滿100減15元", "100011", 15};  // 導(dǎo)出為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));  // 導(dǎo)出為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依賴

<dependencies>
 <dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-csv</artifactId>
  <version>1.5</version>
 </dependency>

 <dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.17</version>
 </dependency>

 <dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.17</version>
 </dependency>


 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
 </dependency></dependencies>

最后,剛才的例子中只寫了3個(gè)字段,100萬(wàn)行,生成的CSV文件有十幾二十兆,太多的話建議分多個(gè)文件打包下周,不然想象一個(gè)打開一個(gè)幾百兆的excel都費(fèi)勁。

以上就是JAVA導(dǎo)出CSV文件實(shí)例教程的詳細(xì)內(nèi)容,更多關(guān)于JAVA導(dǎo)出CSV文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud 微服務(wù)最佳開發(fā)實(shí)踐

    SpringCloud 微服務(wù)最佳開發(fā)實(shí)踐

    本文結(jié)合我們實(shí)際的開發(fā)中遇到的一些問(wèn)題整理出了一份微服務(wù)開發(fā)的實(shí)踐規(guī)范,對(duì)SpringCloud 微服務(wù)開發(fā)實(shí)踐相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-07-07
  • Java中Controller引起的Ambiguous?mapping問(wèn)題及解決

    Java中Controller引起的Ambiguous?mapping問(wèn)題及解決

    這篇文章主要介紹了Java中Controller引起的Ambiguous?mapping問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 淺談Thread.sleep()為什么要拋出中斷異常

    淺談Thread.sleep()為什么要拋出中斷異常

    本文主要介紹了淺談Thread.sleep()為什么要拋出中斷異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用lombok@Data啟動(dòng)項(xiàng)目報(bào)錯(cuò)問(wèn)題及解決

    使用lombok@Data啟動(dòng)項(xiàng)目報(bào)錯(cuò)問(wèn)題及解決

    在使用Lombok時(shí),可能會(huì)遇到實(shí)體類中的@Data注解不生效,導(dǎo)致get方法找不到的問(wèn)題,解決這一問(wèn)題通常需要三個(gè)步驟:首先,檢查項(xiàng)目設(shè)置中編譯規(guī)則是否勾選;其次,確認(rèn)IDE中是否安裝了Lombok插件
    2024-10-10
  • Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問(wèn)題及解決

    Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問(wèn)題及解決

    這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁(yè)面關(guān)閉不了的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Jvm調(diào)優(yōu)和SpringBoot項(xiàng)目?jī)?yōu)化的詳細(xì)教程

    Jvm調(diào)優(yōu)和SpringBoot項(xiàng)目?jī)?yōu)化的詳細(xì)教程

    這篇文章主要介紹了Jvm調(diào)優(yōu)和SpringBoot項(xiàng)目?jī)?yōu)化,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java?Map雙列集合使代碼更高效

    Java?Map雙列集合使代碼更高效

    這篇文章主要介紹了Java?Map雙列集合使用,使你的代碼更高效,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • java拋出異常的幾種情況小結(jié)

    java拋出異常的幾種情況小結(jié)

    這篇文章主要介紹了java拋出異常的幾種情況小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 如何解決Maven無(wú)法拉取SNAPSHOT依賴問(wèn)題

    如何解決Maven無(wú)法拉取SNAPSHOT依賴問(wèn)題

    在使用Maven管理項(xiàng)目時(shí),可能會(huì)遇到無(wú)法拉取SNAPSHOT版本依賴的問(wèn)題,這通常是因?yàn)镸aven默認(rèn)不支持直接拉取SNAPSHOT版本,遇到這樣的問(wèn)題,可以通過(guò)在項(xiàng)目的pom.xml文件中添加<repositories>標(biāo)簽,并配置啟用SNAPSHOT的倉(cāng)庫(kù)地址來(lái)解決
    2024-10-10
  • Java?方法的重載與參數(shù)傳遞詳解

    Java?方法的重載與參數(shù)傳遞詳解

    在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下方法的重載與傳參
    2022-04-04

最新評(píng)論