最佳语言工具库 返回

  • Java - 如何使用 Jackson CSV 库将 java 对象写入 CSV 文件

    • 发布人:peadmin
    • 阅读量:645
  • 一、概述

    在这篇文章中,我们将使用 Jackson CSV 处理器将 java 对象保存到 CSV 文件中。

    要使用 Jackson CSV 库,我们需要将 jackson-dataformat-csv 依赖项添加到 pom.xml。

     

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-csv</artifactId>
        <version>2.9.9</version>
    </dependency>

     

    2.将java对象写入CSV文件

    编辑

    下面我们有 2 个类,我们需要将简单的 UserDto java 类保存到 CSV 文件。
    确保设置正确的路径和文件名作为输出。

    要运行此示例,请将这两个文件复制到您的项目中:

    1. UserCsvWriter
    2. UserDto

    2.1 逻辑

    使用 Jackson CSV 库将 UserDto java pojo 对象保存到 CSV 文件的逻辑。

    类的用法:

    • jackson CSV 库里的 CsvMapper + CsvSchema 
    • jackson databind 库里的 ObjectWriter 
    • jackson core 库里的 JsonGenerator

     

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.ObjectWriter;
    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.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class UserCsvWriter {

        public static void main(String[] args) throws IOException {

            // set correct directory as output
            File csvOutputFile = new File("C:\\csv_tests\\user_output.csv");

            UserDto userDto1 = new UserDto(1L, "Ann", 30);
            UserDto userDto2 = new UserDto(2L, "Seth", 28);
            UserDto userDto3 = new UserDto(3L, "Emm", 24);

            List<UserDto> list = new ArrayList<>(Arrays.asList(userDto1, userDto2, userDto3));

            CsvMapper mapper = new CsvMapper();
            mapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);

            CsvSchema schema = CsvSchema.builder().setUseHeader(true)
                    .addColumn("id")
                    .addColumn("name")
                    .addColumn("age")
                    .build();

            ObjectWriter writer = mapper.writerFor(UserDto.class).with(schema);

            writer.writeValues(csvOutputFile).writeAll(list);

            System.out.println("Users saved to csv file under path: ");
            System.out.println(csvOutputFile);
        }
    }

     

    输出

    Users saved to csv file under path:
    C:\csv_tests\user_output.csv

     

    POJO 类

     

    import com.fasterxml.jackson.annotation.JsonPropertyOrder;

    @JsonPropertyOrder({"id", "name", "age"})
    public class UserDto {

        private Long id;
        private String name;
        private Integer age;

        public UserDto() {

        }

        public UserDto(Long id, String name, Integer age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "UserDto{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

     

    原文链接:

     

    https://dirask.com/posts/Java-how-to-write-java-object-to-CSV-file-using-Jackson-CSV-library-8pVk0j

     

  • 2022-08-20