首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 使用 OpenCSV 讀寫 CSV 檔案完整指南

     編輯:Java 相關知識

OpenCSV 簡介

OpenCSV 是一個簡單易用的 Java CSV 解析庫,它封裝了 CSV 格式檔案的輸入輸出操作,能自動處理 CSV 格式中的特殊字符(如逗號、引號、換行符等),且採用商業友善的授權條款,適合企業級專案使用。

Maven 依賴配置

<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.7.1</version> <!-- 請使用最新版本 -->
</dependency>

讀取 CSV 檔案

方式一:使用 Iterator 逐行讀取(記憶體效率佳)

try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
    String[] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] 是該行各欄位值的陣列
        System.out.println("欄位1: " + nextLine[0] + ", 欄位2: " + nextLine[1]);
    }
}

方式二:一次性讀取所有資料到 List(適合小檔案)

try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
    List<String[]> allRows = reader.readAll();
    for (String[] row : allRows) {
        // 處理每一行資料
    }
}

寫入 CSV 檔案

try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"), 
        CSVWriter.DEFAULT_SEPARATOR,
        CSVWriter.NO_QUOTE_CHARACTER,
        CSVWriter.DEFAULT_ESCAPE_CHARACTER,
        CSVWriter.DEFAULT_LINE_END)) {
    
    // 寫入單行
    String[] header = {"姓名", "年齡", "城市"};
    writer.writeNext(header);
    
    // 批量寫入多行
    List<String[]> data = new ArrayList<>();
    data.add(new String[]{"張三", "25", "台北"});
    data.add(new String[]{"李四", "30", "台中"});
    writer.writeAll(data);
}

進階配置選項

自訂分隔符


// 使用 Tab 作為分隔符
CSVReader reader = new CSVReader(new FileReader("data.tsv"), '\t');

// 同時指定引號字符
CSVReader reader = new CSVReader(new FileReader("data.csv"), '\t', '\'');

// 從第 2 行開始解析(跳過標題行)
CSVReader reader = new CSVReader(new FileReader("data.csv"), '\t', '\'', 1);

直接寫入資料庫 ResultSet

java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
writer.writeAll(resultSet, true); // true 表示包含標題行

映射到 Java Bean

ColumnPositionMappingStrategy<User> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(User.class);
String[] columns = {"name", "age", "city"};
strategy.setColumnMapping(columns);

CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader)
    .withMappingStrategy(strategy)
    .build();

List<User> users = csvToBean.parse();

最佳實踐建議

  • 大檔案請使用逐行讀取避免 OOM
  • 生產環境務必使用 try-with-resources 確保資源釋放
  • 處理特殊字符時建議明確指定引號與轉義字符
  • 跨平台時注意換行符差異(CRLF vs LF)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved