Ⅰ 使用OpenCSV在java中读写CSV
本系列文章最后一部分,专门探讨在Java中使用OpenCSV进行CSV文件读写。OpenCSV凭借其简洁易懂的特性,以及与Apache Commons CSV相媲美的性能和功能,成为CSV解析领域的有力选择。
OpenCSV以Apache 2.0许可证发布,用户可在下载后评估其源代码、Java文档和丰富的JUnit测试套件。该库的便捷性在于其集成于MVNRepository,简化了依赖关系管理。CSVReader的灵活性体现在一次读取一个记录、多个记录列表或作为迭代器,适应不同读取数据需求。
虽然OpenCSV在预定义格式上不如Apache Commons CSV丰富,但它依赖两个解析器提供基础功能,支持读取、写入和将Bean直接映射至CSV,甚至能利用标题行实现CSV到Java Map的高效转换。
对于读取CSV,OpenCSV通过CSVReader实现,与Apache Commons CSV的CSVParser相当,支持简单与复杂解析策略。CSV文件遍历时,每条记录为一个字符串数组,包含多个单独字段。若CSV使用非逗号分隔符,可通过两参数构造函数自定义分隔符。
映射CSV记录至Java对象时,OpenCSV提供两种方法:基于标题的注解@CSVBindByName或基于位置的注解@CSVBindByPosition。对于标题一致的文件,@CSVBindByName注解可自动处理解析数据映射和类型转换,简化流程。当标题与变量名不一致时,可使用注解指定映射标志,以适应特定数据集的结构。若文件无标题,@CSVBindByPosition注解则提供按列位置映射的解决方案。
写入CSV时,OpenCSV提供更多选项,允许从字符串数组或对象列表生成CSV文件。从对象列表写入前需初始化和声明对象。使用字符串数组生成CSV文件时,可通过CSVWriter构造函数指定分隔符,或利用FileWriter或Writer生成文件。通过构造函数参数自定义文件格式、字段和字符常量,实现数据输出的灵活性。未明确指定的参数将使用默认值。
综上所述,OpenCSV凭借其简洁的设计、广泛的适用场景和丰富的功能,成为处理CSV文件的理想选择,无论是读取还是写入,都能提供高效、灵活的解决方案。
Ⅱ java解析csv用什么jar包比较好
CSV其实就是COMMA SEPARATED VALUE的缩写。
在开发中用Java操作csv文件有专门的的API叫javacsv.jar
Ⅲ java 读取csv文件里指定行列的值,比如读取第三行第二列的值。
java读取csv文件,按照指定格式:
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
/**
* 读取CSV文件
* 所谓"CSV",是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。
* 可以看成数据库程序与电子表格之间一种中间通信文件,数据库可以导出。csv格式,excel也可以导入并打开。csv文件,例子如下
* sj_mino1001.jpg,715282,4FB55FE8,
* sj_mino1002.jpg,471289,93203C5C,
* sj_mino1003.jpg,451929,C4E80467,
*
*/
public class CSVDeal{
public static void main(String[] args) {
try {
String[] stringList;
String csvFilePath = "C:\\Users\\Administrator\\Desktop\\20140227135936.csv";
String sourceFileString= "C:\\Users\\Administrator\\Desktop\\test.csv";
CsvReader reader = new CsvReader(csvFilePath); //默认是逗号分隔符,UTF-8编码
CsvWriter writer = new CsvWriter(sourceFileString);
/*
* readRecord()判断是否还有记录,getValues()读取当前记录,然后指针下移
*/
reader.readRecord();
writer.writeRecord(reader.getValues()); //读取表头
/*
* 逐行读取,以免文件太大
* 处理表头后面的数据,这里是在第12列数据统一加前缀"V"
*/
while(reader.readRecord()){
stringList = reader.getValues();
stringList[11] = 'V' + stringList[11];
writer.writeRecord(stringList);
}
reader.close();
writer.close();
}catch(Exception ex){
System.out.println(ex);
}
}
}