首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCSV,如何用自定义处理写入csv?

OpenCSV,如何用自定义处理写入csv?
EN

Stack Overflow用户
提问于 2020-07-10 20:13:44
回答 1查看 2.4K关注 0票数 0

我正在尝试将POJO对象列表写入csv。我使用opencsv,代码非常少:

代码语言:javascript
运行
复制
 StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
                    .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
                    .build();

我在阅读时使用自定义转换器,我也可以为写做类似的事情吗?例如:

  1. 如果字段的类型为List,则将其写为"a,b“。但是我想这样做:"a,b".
  2. A字段是LocalDataTime类型的,我想用"MM/dd/yyyy“格式写它,并在输出csv.

中完全丢弃时间。

我希望输出是这样的:

代码语言:javascript
运行
复制
date of issue,items
"02/22/2020","a,b"

而不是:

代码语言:javascript
运行
复制
date of issue,items
"2020-02-22T00:00","[a,b]"

非常感谢您,感谢您的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 21:42:22

您可以使用注释@CsvDate设置自定义日期格式,并使用@CsvBindAndSplitByName将列表转换为字符串。请找下面的例子:

代码语言:javascript
运行
复制
import static java.time.temporal.ChronoUnit.MONTHS;

import com.opencsv.CSVWriter;
import com.opencsv.bean.CsvBindAndSplitByName;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;


import java.io.FileWriter;
import java.io.Writer;
import java.time.LocalDateTime;
import java.util.List;

public class Main {

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

        Writer writer = new FileWriter("example.csv");

        StatefulBeanToCsv<Item> sbc = new StatefulBeanToCsvBuilder<Item>(writer)
                .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
                .build();

        List<Item> items = List.of(
                new Item(LocalDateTime.now().minus(4, MONTHS), List.of("1", "s")),
                new Item(LocalDateTime.now().minus(1, MONTHS), List.of("1", "d")),
                new Item(LocalDateTime.now().minus(3, MONTHS), List.of("1", "2", "3"))
        );
        sbc.write(items);

        writer.close();


    }

    public static class Item {

        @CsvBindByName(column = "date")
        @CsvDate(value = "yyyy-MM-dd'T'hh:mm")
        private LocalDateTime date;

        @CsvBindAndSplitByName(column = "list", elementType = String.class, writeDelimiter = ",")
        private List<String> array;

        Item(LocalDateTime date, List<String> array) {
            this.date = date;
            this.array = array;
        }

        public LocalDateTime getDate() {
            return date;
        }

        public void setDate(LocalDateTime date) {
            this.date = date;
        }

        public List<String> getArray() {
            return array;
        }

        public void setArray(List<String> array) {
            this.array = array;
        }
    }
}

example.csv输出

代码语言:javascript
运行
复制
"DATE","LIST"
"2020-03-10T02:37","1,s"
"2020-06-10T02:37","1,d"
"2020-04-10T02:37","1,2,3"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62841670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档