亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用實例解析JAVA如何導出CSV文件

發布時間:2020-07-20 10:38:21 來源:億速云 閱讀:207 作者:小豬 欄目:編程語言

這篇文章主要用實例解析JAVA如何導出CSV文件,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

用實例解析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, "GBK");

  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<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

  /**
  * 測試寫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依賴

<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個字段,100萬行,生成的CSV文件有十幾二十兆,太多的話建議分多個文件打包下周,不然想象一個打開一個幾百兆的excel都費勁。

看完上述內容,是不是對用實例解析JAVA如何導出CSV文件有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒城县| 云林县| 凌云县| 张家港市| 辽中县| 凉城县| 凉山| 麦盖提县| 新田县| 镇沅| 晴隆县| 裕民县| 唐海县| 丰原市| 浪卡子县| 天水市| 宁海县| 兰坪| 华宁县| 巧家县| 南昌市| 蒲城县| 永德县| 徐水县| 武威市| 惠安县| 米泉市| 扶沟县| 平罗县| 石柱| 思南县| 电白县| 故城县| 晋城| 金沙县| 郯城县| 高邮市| 安西县| 哈尔滨市| 临夏市| 滦平县|