我的tsv文件包含:

 tax_id GeneID Symbol

9606    1   A1BG


TsvReader.java

private static CellProcessor[] getProcessors() {

    final CellProcessor[] processors = new CellProcessor[] {

    new NotNull(), // tax_id
            new NotNull(), // GeneID
            new NotNull(), // Symbol


    };

    return processors;
}

private static void readCsvBeanReader() throws Exception {

    ICsvBeanReader beanReader = null;
    try {
        beanReader = new CsvBeanReader(new FileReader(CSV_FILENAME),
                CsvPreference.TAB_PREFERENCE);

        // the header elements are used to map the values to the bean (names
        // must match)
        final String[] header = beanReader.getHeader(true);
        final CellProcessor[] processors = getProcessors();

        TsvEntities tsv_ent;
        while ((tsv_ent = beanReader.read(TsvEntities.class, header,
                processors)) != null) {

            System.out.println(String.format("tsv_ent=%s",tsv_ent));


        }

    } finally {
        if (beanReader != null) {
            beanReader.close();
        }
    }
}


TsvEntities.java

package com.tsvreader;

public class TsvEntities {

    private Integer tax_id;
    private Integer GeneID;
    private String Symbol;


    public TsvEntities() {
    }

    public TsvEntities(final Integer tax_id, final Integer GeneID, final String Symbol){

        this.tax_id = tax_id;
        this.GeneID= GeneID;
        this.Symbol=Symbol;

    }

    public Integer getTax_id() {
        return tax_id;
    }

    public void setTax_id(Integer tax_id) {
        this.tax_id = tax_id;
    }

    public Integer getGeneID() {
        return GeneID;
    }

    public void setGeneID(Integer geneID) {
        this.GeneID = geneID;
    }

    public String getSymbol() {
        return Symbol;
    }

    public void setSymbol(String symbol) {
        this.Symbol = symbol;
    }



    @Override
    public String toString() {

    return String
            .format("TsvEntities [tax_id=%s, GeneID=%s, Symbol=%s]",getTax_id(), getGeneID(), getSymbol());



}


展览:

Exception in thread "main" org.supercsv.exception.SuperCsvReflectionException: unable to find method setTax_id GeneID Symbol(java.lang.String) in class com.tsvreader.TsvEntities - check that the corresponding nameMapping element matches the field name in the bean, and the cell processor returns a type compatible with the field
context=null
    at org.supercsv.util.ReflectionUtils.findSetter(ReflectionUtils.java:183)
    at org.supercsv.util.MethodCache.getSetMethod(MethodCache.java:95)
    at org.supercsv.io.CsvBeanReader.populateBean(CsvBeanReader.java:158)
    at org.supercsv.io.CsvBeanReader.read(CsvBeanReader.java:207)
    at com.tsvreader.TsvReader.readCsvBeanReader(TsvReader.java:59)
    at com.tsvreader.TsvReader.main(TsvReader.java:17)

最佳答案

乍一看,我想说的是您的问题是public void setTax_id(Integer tax_id)带有一个Integer参数,但是SuperCsv希望它带有一个String。您应该提供采用setTax_idString方法。 setGeneID也应如此。

编辑:

第一部分不正确。似乎文件的标题未正确解析。 SuperCsv将整行解释为方法名称。检查第一行是否正确分隔。
(从您的问题来看,第一行似乎由空格而不是制表符分隔。)

08-06 06:37