OpenCSV 是一個簡單易用的 Java CSV 解析庫,它封裝了 CSV 格式檔案的輸入輸出操作,能自動處理 CSV 格式中的特殊字符(如逗號、引號、換行符等),且採用商業友善的授權條款,適合企業級專案使用。
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version> <!-- 請使用最新版本 -->
</dependency>
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]);
}
}
try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
List<String[]> allRows = reader.readAll();
for (String[] row : allRows) {
// 處理每一行資料
}
}
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);
java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
writer.writeAll(resultSet, true); // true 表示包含標題行
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();