1

我的 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)
4

1 回答 1

1

乍一看,我会说您的问题是它public void setTax_id(Integer tax_id)采用一个Integer参数,但 SuperCsv 期望它采用String. 您应该提供一个setTax_id采用String. 对于setGeneID.

编辑:

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

于 2013-07-08T11:38:10.003 回答