如何使用OpenCSV按指定表头名称提取CSV列并输出到新文件
基于OpenCSV按表头名提取CSV列的实现方案
首先引入OpenCSV依赖,以Maven为例:
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.6</version> <!-- 可替换为最新稳定版本 --> </dependency>
完整实现代码如下:
import com.opencsv.CSVReaderHeaderAware; import com.opencsv.CSVWriter; import java.io.FileReader; import java.io.FileWriter; import java.util.Map; public class CsvColumnExtractor { public static void main(String[] args) { // 按需修改输入输出路径、目标提取列 String inputPath = "input.csv"; String outputPath = "output.csv"; String[] targetColumns = {"ID", "Name", "Age"}; try ( CSVReaderHeaderAware reader = new CSVReaderHeaderAware(new FileReader(inputPath)); CSVWriter writer = new CSVWriter(new FileWriter(outputPath), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END) ) { // 写入输出文件表头 writer.writeNext(targetColumns); Map<String, String> rowData; // 逐行读取并按表头名提取字段 while ((rowData = reader.readMap()) != null) { String[] outputRow = new String[targetColumns.length]; for (int i = 0; i < targetColumns.length; i++) { outputRow[i] = rowData.get(targetColumns[i]); } writer.writeNext(outputRow); } } catch (Exception e) { e.printStackTrace(); } } }
该实现完全基于表头名称匹配列,原始CSV的列顺序调整、其他列增删都不会影响提取逻辑,输出格式与要求一致,无多余引号包裹字段。
内容的提问来源于stack exchange,提问作者LeeGeon-jin
相关产品推荐
相关产品推荐

