CSV (Comma-Separated Values) 是一种简单的文件格式,用于存储表格数据,如电子表格或数据库。Java 中有多种处理 CSV 文件的 API,它们提供了读取、写入和操作 CSV 数据的功能。
优势:
示例代码:
// 读取CSV
CSVReader reader = new CSVReader(new FileReader("data.csv"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.out.println(Arrays.toString(nextLine));
}
// 写入CSV
CSVWriter writer = new CSVWriter(new FileWriter("output.csv"));
String[] entries = {"John", "Doe", "30"};
writer.writeNext(entries);
writer.close();
优势:
示例代码:
// 读取CSV
Reader in = new FileReader("data.csv");
Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(in);
for (CSVRecord record : records) {
String name = record.get(0);
String age = record.get(1);
}
// 写入CSV
FileWriter out = new FileWriter("output.csv");
try (CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT)) {
printer.printRecord("John", "Doe", 30);
}
优势:
示例代码:
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Person.class).withHeader();
ObjectReader reader = mapper.readerFor(Person.class).with(schema);
List<Person> people = reader.readValues(new File("data.csv")).readAll();
优势:
示例代码:
ICsvBeanReader beanReader = new CsvBeanReader(new FileReader("data.csv"),
CsvPreference.STANDARD_PREFERENCE);
String[] header = beanReader.getHeader(true);
Person person;
while ((person = beanReader.read(Person.class, header, processors)) != null) {
System.out.println(person);
}
问题: 读取CSV时出现乱码 原因: 文件编码与读取时指定的编码不一致 解决: 明确指定编码
Reader in = new InputStreamReader(new FileInputStream("data.csv"), "UTF-8");
问题: 包含逗号或换行符的字段被错误解析 解决: 确保使用引号包裹特殊字段
CSVFormat format = CSVFormat.DEFAULT.withQuote('"');
问题: 内存不足 解决: 使用流式处理而非一次性加载
try (CSVParser parser = CSVParser.parse(file, Charset.defaultCharset(), format)) {
for (CSVRecord record : parser) {
// 逐行处理
}
}
建议:
每种API都有其优势,选择应根据项目具体需求和已有技术栈决定。
没有搜到相关的文章