使用 Jackson Dataformat CSV 实现 CSV 数据的读取和写入
使用Jackson Dataformat CSV实现CSV数据的读取和写入是一种方便且高效的方法。Jackson是Java中广泛使用的一种 JSON 处理库,而Jackson Dataformat CSV是Jackson的CSV格式的扩展。
在开始编写代码之前,需要将以下依赖项添加到项目的Maven或Gradle配置文件中:
Maven依赖项:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.12.5</version>
</dependency>
Gradle依赖项:
groovy
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.12.5'
接下来,让我们看一个示例代码来说明使用Jackson Dataformat CSV的基本用法:
读取CSV文件:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class CsvReader {
public static void main(String[] args) {
try {
// 创建CsvMapper对象
CsvMapper csvMapper = new CsvMapper();
// 创建CsvSchema对象用于定义CSV文件的结构
CsvSchema csvSchema = CsvSchema.builder()
.addColumn("name")
.addColumn("age")
.addColumn("email")
.build();
// 读取CSV文件
File csvFile = new File("data.csv");
MappingIterator<List<String>> mappingIterator = csvMapper.readerFor(List.class)
.with(csvSchema)
.readValues(csvFile);
// 遍历CSV数据行并输出
while (mappingIterator.hasNext()) {
List<String> row = mappingIterator.next();
System.out.println(row);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码读取名为"data.csv"的CSV文件并将其内容打印在控制台上。首先,我们创建了一个`CsvMapper`对象。然后,使用`CsvSchema.builder()`方法创建`CsvSchema`对象来定义CSV文件的结构。在这个例子中,我们定义了名字、年龄和电子邮件三列。接下来,我们指定要读取的CSV文件并使用`MappingIterator`迭代逐行读取CSV数据。最后,我们遍历每一行并打印出来。
写入CSV文件:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class CsvWriter {
public static void main(String[] args) {
try {
// 创建CsvMapper对象
CsvMapper csvMapper = new CsvMapper();
// 创建CsvSchema对象用于定义CSV文件的结构
CsvSchema csvSchema = CsvSchema.builder()
.addColumn("name")
.addColumn("age")
.addColumn("email")
.build();
// 创建要写入的数据列表
List<List<String>> data = Arrays.asList(
Arrays.asList("John Doe", "30", "john.doe@example.com"),
Arrays.asList("Jane Smith", "28", "jane.smith@example.com")
);
// 写入CSV文件
File csvFile = new File("data.csv");
csvMapper.writerFor(List.class)
.with(csvSchema)
.writeValues(csvFile)
.writeAll(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码创建了一个名为"data.csv"的CSV文件,并将数据列表写入。我们使用与读取相同的`CsvMapper`和`CsvSchema`对象来定义CSV文件的结构。然后,我们创建了一个包含数据的列表,并使用`csvMapper.writerFor(List.class)`方法创建一个`CsvWriter`对象。接下来,我们将`CsvWriter`对象与`CsvSchema`对象进行关联,并使用`writeAll`方法将数据写入CSV文件中。
使用Jackson Dataformat CSV可以轻松地读取和写入CSV数据,同时也可以进行更高级的操作,如自定义字段转换器、忽略某些字段等。但这里只是涉及到了基本的读写操作。根据实际需求,你可以进一步探索Jackson Dataformat CSV的其他功能和配置选项,并根据需要进行调整和优化。