使用 OpenCSV 將 Java Bean 對映到 CSV


在我們這個數字化時代,全球每天都會產生大量的資訊;有效地管理資訊儲存方法對於許多領域(包括企業)的成功至關重要。逗號分隔值 (CSV) 檔案格式是一種備受使用者歡迎的替代方案,因為它具有高效的功能和便捷性,以及經濟方面的考慮。它是一種基於文字的選項,可以幫助以簡單輕便的方式儲存、處理和傳輸資料。但是,將 CSV 對映到更復雜的資料結構示例(如 Java Bean)在某些情況下可能是一個難題;但藉助 OpenCSV,可以使一切都更容易理解,並能夠將對映過程轉換為 Java Bean 格式。

什麼是 OpenCSV?

OpenCSV 是在 Java 中管理 CSV 檔案的一個重要工具。這個備受推崇的庫標配了一個易於導航的 API,允許您讀取/寫入包含標題的檔案,同時利用自定義分隔符以及跳脫字元 - 毫不費力!OpenCSV 提供的另一個巨大優勢在於,它簡化了將複雜結構的資料集直接對映到相應的 Bean 類。OpenCSV 為使用者提供了一種有效的方式來建立時尚多樣的內容 - 複雜性和簡潔性結合在一起,創造出最佳的輸出。

使用 OpenCSV 將 Java Bean 對映到 CSV

使用 OpenCSV 在 Java Bean 和 CSV 檔案之間編寫對映需要四個主要步驟 - 定義、建立、對映和寫入。在深入探討這四個步驟之前,使用 OpenCSV 將 Java Bean 對映到 CSV 的四個步驟是:定義 Java Bean、建立 CSVWriter、將 Java Bean 對映到 CSV 以及寫入 CSV 記錄。定義好 Java Bean 後,建立一個 CSVWriter 來處理和管理資料的寫入。接下來是將 Java Bean 對映到 CSV 檔案,提供編寫器所需的資訊。最後,使用 CSVWriter 寫入記錄,從而確保您的資料以您想要的方式表達。透過這四個步驟,您將踏上掌握使用 OpenCSV 將 Java Bean 對映到 CSV 的藝術的道路。

將 OpenCSV 庫新增到專案中

  • 步驟 1 - 對於 Maven 專案,在 pom.xml 檔案中包含 OpenCSV Maven 依賴項。

<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>4.1</version>
</dependency>
  • 步驟 2 - 對於 Gradle 專案,包含 OpenCSV 依賴項。

Compile group: "com.opencsv", name: "opencsv", version: "4.1"
  • 步驟 3 - 您還可以下載 OpenCSV JAR 並將其包含在專案的類路徑中。

將 Java Bean 對映到 CSV

  • 步驟 1 - 建立一個 Writer 例項,用於將資料寫入 CSV 檔案。

Writer writer =
Files.newbufferedWriter(Paths.get(file_location));
  • 步驟 2 - 建立一個物件列表,這些物件需要寫入 CSV 檔案。

  • 步驟 3 - 使用 ColumnPositionMappingStrategy 將建立的物件的列對映到 CSV 的列。

ColumnPositionMappingStrategy mappingStrategy = new
ColumnPositionMappingStrategy();
mappingStrategy.setType(Employee.class);
//where employee is the object to be mapped with CSV
  • 步驟 4 - 透過使用 StatefulBeanToCSVBuilder 類的 build 方法(以 writer 物件作為引數)建立 StatefulBeanToCSV 類的物件。根據需要,使用者還可以提供 -

  • 使用 StatefulBeanToCSVBuilder 物件的 withMappingStrategy 函式,使用 ColumnPositionMappingStrategy。

  • 使用 StatefulBeanToCSVBuilder 物件的 withSeparator 函式,使用生成的 CSV 檔案的分隔符。

  • 使用 StatefulBeanToCSVBuilder 物件的 withQuotechar 函式,使用生成的 csv 檔案的 withQuotechar。

StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withMappingStrategy(mappingStrategy)
. withSeparator('#')
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
. build ();
  • 步驟 5 - 建立後,可以透過使用 StatefulBeanToCsv 物件中的 write 方法,將物件列表或單個物件新增到 csv 檔案中。

beanToCsv.write(Employeelist);

示例

我們的目標是建立一個全面的 Employee 物件列表,每個物件都包含重要的屬性,如姓名、年齡、公司和薪資。然後,我們將生成一個 CSV 檔案 Employees.csv,其中包含 Employee 物件。

Employee.java

public class Employee {

   public String Name, Age, Company, Salary;

   public Employee(String name, String age,
      String company, String salary) {
      super();
      Name = name;
      Age = age;
      Company = company;
      Salary = salary;
   }
   
   @Override
   public String toString() {
      return "Employee [Name=" + Name + ",
      Age=" + Age + ", Company=" + Company + ",
      Salary=" + Salary + "]";
   }
}

BeanToCSV.java

import java.io.FileWriter;
import java.io.Writer;
import java.nio.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;

public class BeanToCSV {
   public static void main(String[] args) {

      // name of generated csv
      final String CSV_LOCATION = "Employees.csv ";

      try {

         // Creating writer class to generate
         // csv file
         FileWriter writer = newFileWriter(CSV_LOCATION);

         // create a list of employees
         List<Employee> EmployeeList = newArrayList<Employee>();
         Employee emp1 = new Employee
            ("Anurag", "24", "HTc", "75000");
         Employee emp2 = new Employee
            ("Amaan", "24", "Microsoft", "79000");
         Employee emp3 = new Employee
            ("Rashi", "26", "TCS", "39000");
         Employee emp4 = new Employee
            ("Varun", "22", "NgGear", "15000");
         Employee emp5 = new Employee
            ("Pranjal", "29", "Sath", "51000");
         EmployeeList.add(emp1);
         EmployeeList.add(emp2);
         EmployeeList.add(emp3);
         EmployeeList.add(emp4);
         EmployeeList.add(emp5);

         // Create Mapping Strategy to arrange the
         // column name in order
         ColumnPositionMappingStrategy mappingStrategy=
            new ColumnPositionMappingStrategy();
         mappingStrategy.setType(Employee.class);

         // Arrange column name as provided in below array.
         String[] columns = new String[]
            { "Name", "Age", "Company", "Salary" };
         mappingStrategy.setColumnMapping(columns);

         // Creating StatefulBeanToCsv object
         StatefulBeanToCsvBuilder<Employee> builder=
               new StatefulBeanToCsvBuilder(writer);
         StatefulBeanToCsv beanWriter =
            builder.withMappingStrategy(mappingStrategy).build();

         // Write list to StatefulBeanToCsv object
         beanWriter.write(EmployeeList);

         // closing the writer object
         writer.close();
      }
      catch (Exception e) {
         e.printStackTrace();
      }
   }
}

輸出

EmployeeData.csv
CSV file contains: ----

"Anurag", "24", "HTc", "75000"
"Amaan", "24", "Microsoft", "79000"
"Rashi", "26", "TCS", "39000"
"Varun", "22", "NgGear", "15000"
"Pranjal", "29", "Sath", "51000"

結論

Java 的 Open CSV 是一款強大的工具,可以簡化 CSV 檔案的讀取和寫入,因此,如果您需要一種更簡單的方法來處理 CSV 檔案中複雜的資料結構,那麼 Open CSV 就是您的不二之選 - 這個工具可以將 Java Bean 對映到該格式。簡單地定義 Java Bean 並將其對映到 CSV 就足以通過幾行程式碼生成編寫良好的 CSV 記錄,並且 Open CSV 的靈活性和可靠性使其成為有效管理資料驅動應用程式中 CSV 檔案的重要元件。

更新於: 2023 年 7 月 28 日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.