2013-07-08 41 views
0

我TSV文件包含获取的异常而在Java中读取与SuperCsv 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) 

回答

1

从第一眼我会说,你的问题是, public void setTax_id(Integer tax_id)需要一个 Integer参数,但预计SuperCsv它采取 String。您应该提供采用 StringsetTax_id方法。 setGeneID也是如此。

编辑:

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

+0

仍然是相同的例外 – Shiv

+0

我该怎么办? – Shiv

+0

@Shiv将所有''(即单个空格字符)转换为'\ t'(制表符)。但如果可能的话,在输入文件中执行它,你的代码看起来不错。 –