java - OpenCSV header 缺少找到的必填字段 []

标签 java opencsv vavr

opencsv 5.1

Caused by: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Header is missing required fields [ALGVERIFICATION, DISTAL MV, LOCATION, PREDICTED STATE, PROXIMAL MV, RUN, SAMPLE TIME]. The list of headers encountered is [].
    at com.opencsv.bean.HeaderNameBaseMappingStrategy.captureHeader(HeaderNameBaseMappingStrategy.java:69)
@ParameterizedTest
@ArgumentsSource(MyArgumentsProvider.class)
void test( AlgorithmVerification verifications )
{
    Log.d("test", verifications.location);
    assertThat(verifications).isNotNull();
}


public enum State {
    NA,
    ADVANCE,
    RETRACT,
}

public static class StateConverter extends AbstractBeanField {

    @Override
    protected Object convert(String value) {
        return State.valueOf(value);
    }
}

public static class AlgorithmVerification {
    @CsvBindByName(column = "Sample Time", required = true)
    protected float sampleTime;

    @CsvBindByName(column = "Distal mV", required = true)
    protected int distalMV;

    @CsvBindByName(column = "Proximal mV", required = true)
    protected int proximalMV;

    @CsvCustomBindByName(column = "Predicted State", converter = StateConverter.class, required = true)
    protected State predictedState;

    @CsvBindByName(column = "run", required = true)
    protected String run;

    @CsvCustomBindByName(column = "Location", converter = StateConverter.class, required = true)
    protected String location;

    @CsvCustomBindByName(column = "AlgVerification", converter = StateConverter.class, required = true)
    protected State algVerification;
}


static class MyArgumentsProvider implements ArgumentsProvider {

    @Override
    public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws IOException, URISyntaxException {
        return Files.list(Paths.get(ClassLoader.getSystemResource("avd").toURI()))
            .map(Path::toFile)
            .map( f -> Try.withResources( () -> new FileReader(f) )
                .of(CsvToBeanBuilder::new)
                .map(b -> b.withType(AlgorithmVerification.class) )
                .map(CsvToBeanBuilder::build)
                .map(CsvToBean::parse)
                .getOrElseThrow((throwable) -> new RuntimeException(f.getName(), throwable))
            )
            .flatMap(List::stream)
            .map(Arguments::of);
    }
}

这是文件的开头

Sample Time,Distal mV,Proximal mV,Predicted State,run,Location,AlgVerification
0.016,2509,2502,NA,DV-MyString,-1,-1

我错过了一步吗?标题是不是错了?我注意到它正在寻找大写标题...但即便如此它也没有找到

最佳答案

看起来我对 vavr Try.withResources 的使用是错误的,应该是这样的

return Files.list(Paths.get(ClassLoader.getSystemResource("avd").toURI()))
    .map(Path::toFile)
    .map( f -> Try.withResources( () -> new FileReader(f) )
            .of((fr ) -> new CsvToBeanBuilder<AlgorithmVerification>(fr)
                .withType(AlgorithmVerification.class)
                .build()
                .parse())
        .getOrElseThrow((throwable) -> new RuntimeException(f.getName(), throwable))
    )
    .flatMap(List::stream)
    .map(Arguments::of);

关于java - OpenCSV header 缺少找到的必填字段 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61737446/

相关文章:

java - 使用 opencsv 将 csv 文件中的值添加到 JFreeChart XYDataset

java - 哪个 opencsv 版本与 Java 6 兼容

java - 使用 VAVR 将 map 列表转换为单个 map

java - 不可变队列的需求是什么?

java - Java 中的 lxml 替代方案?

java - 在数据表中自动添加行 ID (jQuery)

java - OpenCSV所有数据存储在单行版本(5.1)和数据丢失

java - 不可变映射的无锁原子更新

java - Android SDK r20 - Windows 7 - 未找到安装 Java JDK

java - Struts2 + Spring项目中通过StrutsSpringTestCase调用拦截器